diff --git a/src/ComponentFramework-Mock-Generator/Metadata.db/SQLQueries/Metadata.Attribute.ts b/src/ComponentFramework-Mock-Generator/Metadata.db/SQLQueries/Metadata.Attribute.ts
index 11e080c..51c6f32 100644
--- a/src/ComponentFramework-Mock-Generator/Metadata.db/SQLQueries/Metadata.Attribute.ts
+++ b/src/ComponentFramework-Mock-Generator/Metadata.db/SQLQueries/Metadata.Attribute.ts
@@ -3,7 +3,7 @@
Licensed under the MIT license.
*/
-import type { ShkoOnline } from '@shko.online/componentframework-mock/ShkoOnline';
+import type { ShkoOnline } from '../../../ShkoOnline';
import alasql from 'alasql';
export const CREATE_TABLE_METADATA_ATTRIBUTE = `
diff --git a/src/ComponentFramework-Mock-Generator/mockRefreshDatasets.ts b/src/ComponentFramework-Mock-Generator/mockRefreshDatasets.ts
index bdc999c..d0d105e 100644
--- a/src/ComponentFramework-Mock-Generator/mockRefreshDatasets.ts
+++ b/src/ComponentFramework-Mock-Generator/mockRefreshDatasets.ts
@@ -3,8 +3,6 @@
Licensed under the MIT license.
*/
-///
-
import type { PropertyToMock } from '../ComponentFramework-Mock';
import type { MockGenerator } from './MockGenerator';
import type { ShkoOnline } from '../ShkoOnline';
diff --git a/src/ComponentFramework-Mock-Generator/mockRefreshParameters.ts b/src/ComponentFramework-Mock-Generator/mockRefreshParameters.ts
index 7d58dac..285a95b 100644
--- a/src/ComponentFramework-Mock-Generator/mockRefreshParameters.ts
+++ b/src/ComponentFramework-Mock-Generator/mockRefreshParameters.ts
@@ -3,8 +3,6 @@
Licensed under the MIT license.
*/
-///
-
import type { MockGenerator } from './MockGenerator';
import type { ShkoOnline } from '../ShkoOnline';
import { stub } from 'sinon';
diff --git a/src/ComponentFramework-Mock/Context.mock.ts b/src/ComponentFramework-Mock/Context.mock.ts
index ccc4632..9dd2163 100644
--- a/src/ComponentFramework-Mock/Context.mock.ts
+++ b/src/ComponentFramework-Mock/Context.mock.ts
@@ -89,3 +89,9 @@ export class ContextMock>
this.webAPI = new WebApiMock(db, this.formatting);
}
}
+
+declare global {
+ interface ObjectConstructor {
+ getOwnPropertyNames(o: T): (keyof T)[];
+ }
+}
\ No newline at end of file
diff --git a/src/ComponentFramework-Mock/PropertyTypes/DataSet.mock.ts b/src/ComponentFramework-Mock/PropertyTypes/DataSet.mock.ts
index 6424113..1cbeb32 100644
--- a/src/ComponentFramework-Mock/PropertyTypes/DataSet.mock.ts
+++ b/src/ComponentFramework-Mock/PropertyTypes/DataSet.mock.ts
@@ -252,3 +252,115 @@ export class DataSetMock implements ComponentFramework.PropertyTypes.DataSet {
});
}
}
+
+declare global{
+ namespace ComponentFramework {
+ namespace PropertyTypes {
+ /**
+ * The structure of a dataset property as it would be passed to a control
+ */
+ interface DataSet {
+ /**
+ * Delete the records from data source.
+ * @param ids Array of IDs to be deleted.
+ * @todo Overloaded by Shko Online
+ */
+ delete: (ids: string[]) => Promise;
+
+ /**
+ * The capabilities for the dataset.
+ * @todo Overloaded by Shko Online
+ */
+ getDataSetCapabilities: () => DataProviderCapabilities;
+
+ /**
+ * Initialize a local record object for control to set the value. The control needs to invoke the {@link ComponentFramework.PropertyHelper.DataSetApi.EntityRecord.save save()} method on the newly created record to persist the change.
+ * @todo Overloaded by Shko Online
+ */
+ newRecord: () => ComponentFramework.PropertyHelper.DataSetApi.EntityRecord;
+ }
+
+ /**
+ * Provides access to all the properties of a file.
+ * @todo Overloaded by Shko Online
+ */
+ interface DataProviderCapabilities {
+ /**
+ * Whether adding new records is supported or not.
+ */
+ canCreateNewRecords: boolean;
+ /**
+ * If the dataset records can be paged.
+ */
+ canPaginate: boolean;
+ /**
+ * Whether image info for record columns can be retrieved.
+ */
+ hasCellImageInfo: boolean;
+ /**
+ * Whether the dataset supports record navigation for lookup and primary fields.
+ */
+ hasRecordNavigation: boolean;
+ /**
+ * If the data provider has edit capabilities.
+ */
+ isEditable: boolean;
+ /**
+ * If the dataset can be filtered.
+ */
+ isFilterable: boolean;
+ /**
+ * If the dataset can be sorted.
+ */
+ isSortable: boolean;
+ }
+ }
+ namespace PropertyHelper {
+ namespace DataSetApi {
+ /**
+ * Base interface for dataset record result. Supports value retrival by column name.
+ */
+ interface EntityRecord {
+ /**
+ * Whether this record is dirty. Only applicable if the dataset is editable and this record has dirty values.
+ * @todo Overloaded by Shko Online
+ */
+ isDirty(): boolean;
+
+ /**
+ * Whether this record is valid. Only applicable if the dataset is editable and this record has invalid values.
+ * @todo Overloaded by Shko Online
+ */
+ isValid(): boolean;
+
+ /**
+ * Saves the record
+ * @throws You can get an error saying `Invalid snapshot with id undefined` when the incorrect column name parameter was used with {@link ComponentFramework.PropertyHelper.DataSetApi.EntityRecord.setValue setValue}. Make sure to use the logical name of the column.
+ * @todo Overloaded by Shko Online
+ */
+ save(): Promise;
+
+ /**
+ * Set value for the column.
+ * @param columnName The logical name of the column.
+ * @param value New value for the record.
+ * @todo Overloaded by Shko Online
+ */
+ setValue(
+ columnName: string,
+ value:
+ | string
+ | Date
+ | number
+ | number[]
+ | boolean
+ | ComponentFramework.EntityReference
+ | ComponentFramework.EntityReference[]
+ | ComponentFramework.LookupValue
+ | ComponentFramework.LookupValue[],
+ ): Promise;
+ }
+ }
+ }
+ }
+}
diff --git a/src/global.d.ts b/src/global.d.ts
deleted file mode 100644
index f844af3..0000000
--- a/src/global.d.ts
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- Copyright (c) 2022 Betim Beja and Shko Online LLC
- Licensed under the MIT license.
-*/
-
-///
-
-declare namespace ComponentFramework {
- namespace PropertyTypes {
- /**
- * The structure of a dataset property as it would be passed to a control
- */
- interface DataSet {
- /**
- * Delete the records from data source.
- * @param ids Array of IDs to be deleted.
- * @todo Overloaded by Shko Online
- */
- delete: (ids: string[]) => Promise;
-
- /**
- * The capabilities for the dataset.
- * @todo Overloaded by Shko Online
- */
- getDataSetCapabilities: () => DataProviderCapabilities;
-
- /**
- * Initialize a local record object for control to set the value. The control needs to invoke the {@link ComponentFramework.PropertyHelper.DataSetApi.EntityRecord.save save()} method on the newly created record to persist the change.
- * @todo Overloaded by Shko Online
- */
- newRecord: () => ComponentFramework.PropertyHelper.DataSetApi.EntityRecord;
- }
-
- /**
- * Provides access to all the properties of a file.
- * @todo Overloaded by Shko Online
- */
- interface DataProviderCapabilities {
- /**
- * Whether adding new records is supported or not.
- */
- canCreateNewRecords: boolean;
- /**
- * If the dataset records can be paged.
- */
- canPaginate: boolean;
- /**
- * Whether image info for record columns can be retrieved.
- */
- hasCellImageInfo: boolean;
- /**
- * Whether the dataset supports record navigation for lookup and primary fields.
- */
- hasRecordNavigation: boolean;
- /**
- * If the data provider has edit capabilities.
- */
- isEditable: boolean;
- /**
- * If the dataset can be filtered.
- */
- isFilterable: boolean;
- /**
- * If the dataset can be sorted.
- */
- isSortable: boolean;
- }
- }
- namespace PropertyHelper {
- namespace DataSetApi {
- /**
- * Base interface for dataset record result. Supports value retrival by column name.
- */
- interface EntityRecord {
- /**
- * Whether this record is dirty. Only applicable if the dataset is editable and this record has dirty values.
- * @todo Overloaded by Shko Online
- */
- isDirty(): boolean;
-
- /**
- * Whether this record is valid. Only applicable if the dataset is editable and this record has invalid values.
- * @todo Overloaded by Shko Online
- */
- isValid(): boolean;
-
- /**
- * Saves the record
- * @throws You can get an error saying `Invalid snapshot with id undefined` when the incorrect column name parameter was used with {@link ComponentFramework.PropertyHelper.DataSetApi.EntityRecord.setValue setValue}. Make sure to use the logical name of the column.
- * @todo Overloaded by Shko Online
- */
- save(): Promise;
-
- /**
- * Set value for the column.
- * @param columnName The logical name of the column.
- * @param value New value for the record.
- * @todo Overloaded by Shko Online
- */
- setValue(
- columnName: string,
- value:
- | string
- | Date
- | number
- | number[]
- | boolean
- | ComponentFramework.EntityReference
- | ComponentFramework.EntityReference[]
- | ComponentFramework.LookupValue
- | ComponentFramework.LookupValue[],
- ): Promise;
- }
- }
- }
-}
-
-interface ObjectConstructor {
- getOwnPropertyNames(o: T): (keyof T)[];
-}
diff --git a/storybook/stories/ComplexComponent.stories.ts b/storybook/stories/ComplexComponent.stories.ts
index e7f94d6..719c14d 100644
--- a/storybook/stories/ComplexComponent.stories.ts
+++ b/storybook/stories/ComplexComponent.stories.ts
@@ -29,7 +29,7 @@ export default {
} as Meta;
const renderGenerator = () => {
- let container: HTMLDivElement;
+ let container: HTMLDivElement | null;
let mockGenerator: ComponentFrameworkMockGenerator;
return function () {
diff --git a/storybook/stories/ContainerSize.stories.ts b/storybook/stories/ContainerSize.stories.ts
index 4cdcf46..888c0c3 100644
--- a/storybook/stories/ContainerSize.stories.ts
+++ b/storybook/stories/ContainerSize.stories.ts
@@ -27,7 +27,7 @@ interface StoryArgs {
}
const renderGenerator = () => {
- let container: HTMLDivElement;
+ let container: HTMLDivElement | null;
let mockGenerator: ComponentFrameworkMockGenerator;
return function () {
diff --git a/storybook/stories/ContainerSizeVirtual.stories.ts b/storybook/stories/ContainerSizeVirtual.stories.ts
index f7a5966..521c065 100644
--- a/storybook/stories/ContainerSizeVirtual.stories.ts
+++ b/storybook/stories/ContainerSizeVirtual.stories.ts
@@ -8,7 +8,7 @@ import { ComponentFrameworkMockGeneratorReact, TwoOptionsPropertyMock } from '..
export default {
title: "Shko Online's ComponentFramework-Mock/ContainerSizeReact",
- argTypes: {
+ argTypes: {
trackContainer: {
defaultValue: false,
name: 'Track Container',
@@ -28,11 +28,11 @@ interface StoryArgs {
}
const renderGenerator = () => {
- let container: HTMLDivElement;
+ let container: HTMLDivElement | null;
let mockGenerator: ComponentFrameworkMockGeneratorReact;
return function () {
- const [args] = useArgs();
+ const [args, updateArgs] = useArgs();
useEffect(
() => () => {
container = null;
diff --git a/storybook/stories/MultiSelectOptionSet.stories.ts b/storybook/stories/MultiSelectOptionSet.stories.ts
index 1ac0229..f0511ed 100644
--- a/storybook/stories/MultiSelectOptionSet.stories.ts
+++ b/storybook/stories/MultiSelectOptionSet.stories.ts
@@ -37,7 +37,7 @@ interface StoryArgs {
}
const renderGenerator = () => {
- let container: HTMLDivElement;
+ let container: HTMLDivElement | null;
let mockGenerator: ComponentFrameworkMockGenerator;
return function () {
@@ -78,8 +78,8 @@ const renderGenerator = () => {
selection: args.selection,
});
- mockGenerator.onOutputChanged.callsFake(()=>{
- updateArgs({selection: mockGenerator.context._parameters.selection.raw});
+ mockGenerator.onOutputChanged.callsFake(() => {
+ updateArgs({ selection: mockGenerator.context._parameters.selection.raw });
});
mockGenerator.ExecuteInit();
@@ -89,9 +89,9 @@ const renderGenerator = () => {
mockGenerator.context.mode.isVisible = args.isVisible;
mockGenerator.context.mode.isControlDisabled = args.isDisabled;
mockGenerator.UpdateValues({
- selection: args.selection
+ selection: args.selection,
});
-
+
mockGenerator.ExecuteUpdateView();
}
diff --git a/storybook/stories/OwnerLookup.stories.ts b/storybook/stories/OwnerLookup.stories.ts
index 1363089..6af1f06 100644
--- a/storybook/stories/OwnerLookup.stories.ts
+++ b/storybook/stories/OwnerLookup.stories.ts
@@ -22,7 +22,7 @@ export default {
} as Meta;
const renderGenerator = () => {
- let container: HTMLDivElement;
+ let container: HTMLDivElement | null;
let mockGenerator: ComponentFrameworkMockGenerator;
return function () {
@@ -50,12 +50,10 @@ const renderGenerator = () => {
value: { entityType: 'account', id: 'my-id' },
});
- mockGenerator.onOutputChanged.callsFake(({value}) => {
+ mockGenerator.onOutputChanged.callsFake(({ value }) => {
mockGenerator.context._parameters.value._Refresh();
updateArgs({
- value: value
- ? value[0]
- : undefined,
+ value: value ? value[0] : undefined,
});
});
@@ -66,9 +64,9 @@ const renderGenerator = () => {
mockGenerator.context.mode.isVisible = args.isVisible;
mockGenerator.context.mode.isControlDisabled = args.isDisabled;
mockGenerator.UpdateValues({
- value: args.value
+ value: args.value,
});
-
+
mockGenerator.ExecuteUpdateView();
}
return container;
diff --git a/storybook/stories/WebAPIControl.stories.ts b/storybook/stories/WebAPIControl.stories.ts
index 71da989..db338f7 100644
--- a/storybook/stories/WebAPIControl.stories.ts
+++ b/storybook/stories/WebAPIControl.stories.ts
@@ -16,7 +16,7 @@ interface StoryArgs {
}
const renderGenerator = () => {
- let container: HTMLDivElement;
+ let container: HTMLDivElement | null;
let mockGenerator: ComponentFrameworkMockGenerator;
return function () {
@@ -40,23 +40,29 @@ const renderGenerator = () => {
);
mockGenerator.metadata.initMetadata([
- { LogicalName: 'account', EntitySetName: 'accounts', PrimaryIdAttribute: 'accountid', PrimaryNameAttribute: 'name', Attributes: [
- {
- AttributeType: AttributeType.Uniqueidentifier,
- LogicalName: 'accountid',
- SchemaName: 'AccountId'
- } as ShkoOnline.AttributeMetadata,
- {
- AttributeType: AttributeType.String,
- LogicalName: 'name',
- SchemaName: 'Name'
- } as ShkoOnline.StringAttributeMetadata,
- {
- AttributeType: AttributeType.Money,
- LogicalName: 'revenue',
- SchemaName: 'revenue'
- } as ShkoOnline.AttributeMetadata
- ] },
+ {
+ LogicalName: 'account',
+ EntitySetName: 'accounts',
+ PrimaryIdAttribute: 'accountid',
+ PrimaryNameAttribute: 'name',
+ Attributes: [
+ {
+ AttributeType: AttributeType.Uniqueidentifier,
+ LogicalName: 'accountid',
+ SchemaName: 'AccountId',
+ } as ShkoOnline.AttributeMetadata,
+ {
+ AttributeType: AttributeType.String,
+ LogicalName: 'name',
+ SchemaName: 'Name',
+ } as ShkoOnline.StringAttributeMetadata,
+ {
+ AttributeType: AttributeType.Money,
+ LogicalName: 'revenue',
+ SchemaName: 'revenue',
+ } as ShkoOnline.AttributeMetadata,
+ ],
+ },
]);
mockGenerator.context.mode.isControlDisabled = args.isDisabled;
@@ -81,7 +87,5 @@ const renderGenerator = () => {
export const WebAPIControl = {
render: renderGenerator(),
- args: {
-
- },
+ args: {},
} as StoryObj;