diff --git a/.gitignore b/.gitignore index 50ea1ba..b4b9e23 100644 --- a/.gitignore +++ b/.gitignore @@ -36,4 +36,7 @@ yarn-error.log* .vercel # tsup -dist \ No newline at end of file +dist + +# idea +.idea \ No newline at end of file diff --git a/.idea/discvr-components.iml b/.idea/discvr-components.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/discvr-components.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..03d9549 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..07115cd --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..c61594a --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..6fae15d --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + 1718636855350 + + + + + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 9f0519b..df52134 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "eslint": "^8.48.0", "prettier": "^3.0.3", "tsconfig": "*", - "turbo": "*" + "turbo": "latest" } }, "apps/docs": { @@ -7742,6 +7742,10 @@ "bser": "2.1.1" } }, + "node_modules/field-label-component": { + "resolved": "packages/field-label-component", + "link": true + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -10297,6 +10301,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/operator-label-component": { + "resolved": "packages/operator-label-component", + "link": true + }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -10820,15 +10828,6 @@ "react": "17.0.2" } }, - "node_modules/react-dom/node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -10867,6 +10866,27 @@ "react": "^16.0.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/react-test-renderer": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.2.tgz", + "integrity": "sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.1", + "react-is": "^17.0.2", + "react-shallow-renderer": "^16.13.1", + "scheduler": "^0.20.2" + }, + "peerDependencies": { + "react": "17.0.2" + } + }, + "node_modules/react-test-renderer/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, "node_modules/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", @@ -11390,6 +11410,15 @@ "node": ">=v12.22.7" } }, + "node_modules/scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, "node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", @@ -13207,37 +13236,6 @@ "react-test-renderer": "^17.0.0" } }, - "packages/discvr-ui-components/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "packages/discvr-ui-components/node_modules/react-test-renderer": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.2.tgz", - "integrity": "sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==", - "dev": true, - "dependencies": { - "object-assign": "^4.1.1", - "react-is": "^17.0.2", - "react-shallow-renderer": "^16.13.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" - } - }, - "packages/discvr-ui-components/node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dev": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, "packages/discvr-utils": { "version": "0.0.0", "dependencies": { @@ -13253,6 +13251,44 @@ "typescript": "^4.5.3" } }, + "packages/field-label-component": { + "version": "0.0.0", + "dependencies": { + "@mui/icons-material": "^5.14.16", + "@mui/material": "^5.0.0", + "@mui/x-data-grid": "^6.0.1", + "eslint-config-custom": "*", + "jest-environment-jsdom": "^29.7.0", + "react": "^17.0.0", + "react-select": "^5.7.4" + }, + "devDependencies": { + "@babel/preset-env": "^7.23.3", + "@babel/preset-react": "^7.23.3", + "babel-jest": "^29.7.0", + "jest": "^29.7.0", + "react-test-renderer": "^17.0.0" + } + }, + "packages/operator-label-component": { + "version": "0.0.0", + "dependencies": { + "@mui/icons-material": "^5.14.16", + "@mui/material": "^5.0.0", + "@mui/x-data-grid": "^6.0.1", + "eslint-config-custom": "*", + "jest-environment-jsdom": "^29.7.0", + "react": "^17.0.0", + "react-select": "^5.7.4" + }, + "devDependencies": { + "@babel/preset-env": "^7.23.3", + "@babel/preset-react": "^7.23.3", + "babel-jest": "^29.7.0", + "jest": "^29.7.0", + "react-test-renderer": "^17.0.0" + } + }, "packages/tsconfig": { "version": "0.0.0", "license": "MIT" @@ -17790,36 +17826,6 @@ "react": "^17.0.0", "react-select": "^5.7.4", "react-test-renderer": "^17.0.0" - }, - "dependencies": { - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "react-test-renderer": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.2.tgz", - "integrity": "sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "react-is": "^17.0.2", - "react-shallow-renderer": "^16.13.1", - "scheduler": "^0.20.2" - } - }, - "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - } } }, "discvr-utils": { @@ -18748,6 +18754,23 @@ "bser": "2.1.1" } }, + "field-label-component": { + "version": "file:packages/field-label-component", + "requires": { + "@babel/preset-env": "^7.23.3", + "@babel/preset-react": "^7.23.3", + "@mui/icons-material": "^5.14.16", + "@mui/material": "^5.0.0", + "@mui/x-data-grid": "^6.0.1", + "babel-jest": "^29.7.0", + "eslint-config-custom": "*", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "react": "^17.0.0", + "react-select": "^5.7.4", + "react-test-renderer": "^17.0.0" + } + }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -20593,6 +20616,23 @@ "is-wsl": "^2.2.0" } }, + "operator-label-component": { + "version": "file:packages/operator-label-component", + "requires": { + "@babel/preset-env": "^7.23.3", + "@babel/preset-react": "^7.23.3", + "@mui/icons-material": "^5.14.16", + "@mui/material": "^5.0.0", + "@mui/x-data-grid": "^6.0.1", + "babel-jest": "^29.7.0", + "eslint-config-custom": "*", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "react": "^17.0.0", + "react-select": "^5.7.4", + "react-test-renderer": "^17.0.0" + } + }, "optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -20930,17 +20970,6 @@ "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "scheduler": "^0.20.2" - }, - "dependencies": { - "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - } } }, "react-is": { @@ -20974,6 +21003,26 @@ "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" } }, + "react-test-renderer": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.2.tgz", + "integrity": "sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "react-is": "^17.0.2", + "react-shallow-renderer": "^16.13.1", + "scheduler": "^0.20.2" + }, + "dependencies": { + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + } + } + }, "react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", @@ -21355,6 +21404,15 @@ "xmlchars": "^2.2.0" } }, + "scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, "semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", diff --git a/packages/discvr-ui-components/package.json b/packages/discvr-ui-components/package.json index 3dfe561..d4c60ab 100644 --- a/packages/discvr-ui-components/package.json +++ b/packages/discvr-ui-components/package.json @@ -7,7 +7,7 @@ "scripts": { "test": "jest", "lint": "eslint .", - "build": "tsup field-type-info.tsx --format cjs,esm --dts", + "build": "tsup src/*.tsx --format cjs,esm --dts", "dev": "npm run build -- --watch" }, "jest": { diff --git a/packages/discvr-ui-components/src/field-label.tsx b/packages/discvr-ui-components/src/field-label.tsx new file mode 100644 index 0000000..9f61e4b --- /dev/null +++ b/packages/discvr-ui-components/src/field-label.tsx @@ -0,0 +1,73 @@ +import React from 'react'; +import Select from '@mui/material/Select'; +import MenuItem from '@mui/material/MenuItem'; + + +interface FieldModel { + name: string; + label: string | undefined; + description: string; + type: string; + isInDefaultColumns: boolean; + isMultiValued: boolean; + isHidden: boolean; + colWidth: number; + formatString: string; + orderKey: number; + allowableValues: string[]; + category: string; + url: string; + flex: number; + supportsFilter: boolean; +} + + +interface FilterType { + field: string; + operator: string; + value: string; +} + + +type HandleFilterChangeFunction = ( + index: number, + key: string, + value: string | undefined, +) => FilterType; + + +interface FieldLabelProps { + filter: FilterType; + index: number; + handleFilterChange: HandleFilterChangeFunction; + fieldTypeInfo: FieldModel[]; +} + + +function FieldLabel(props: FieldLabelProps): React.ReactElement | null { + + const {filter, index, handleFilterChange, fieldTypeInfo} = props + + return ( + + ); + +} + +export {FieldLabel} \ No newline at end of file diff --git a/packages/discvr-ui-components/field-type-info.tsx b/packages/discvr-ui-components/src/field-type-info.tsx similarity index 100% rename from packages/discvr-ui-components/field-type-info.tsx rename to packages/discvr-ui-components/src/field-type-info.tsx diff --git a/packages/discvr-ui-components/src/operator-label.tsx b/packages/discvr-ui-components/src/operator-label.tsx new file mode 100644 index 0000000..15bbb42 --- /dev/null +++ b/packages/discvr-ui-components/src/operator-label.tsx @@ -0,0 +1,83 @@ +import React from 'react'; +import Select from '@mui/material/Select'; +import MenuItem from '@mui/material/MenuItem'; + +interface FieldModel { + name: string; + label: string | undefined; + description: string; + type: string; + isInDefaultColumns: boolean; + isMultiValued: boolean; + isHidden: boolean; + colWidth: number; + formatString: string; + orderKey: number; + allowableValues: string[]; + category: string; + url: string; + flex: number; + supportsFilter: boolean; +} + +interface FilterType { + field: string; + operator: string; + value: string; +} + + +type HandleFilterChangeFunction = ( + index: number, + key: string, + value: string | undefined, +) => FilterType; + + +type GetOperatorsForFieldFunction = ( + fieldTypeInfo: FieldModel | undefined +) => string[] | undefined + + +interface OperatorLabelProps { + filter: FilterType; + index: number; + handleFilterChange: HandleFilterChangeFunction; + fieldTypeInfo: FieldModel[]; + getOperatorsForField: GetOperatorsForFieldFunction; +} + +function OperatorLabel(props: OperatorLabelProps): React.ReactElement | null { + + const {filter, index, getOperatorsForField, handleFilterChange, fieldTypeInfo} = props + + + return ( + + ); +} + +export {OperatorLabel} \ No newline at end of file diff --git a/packages/discvr-ui-components/tests/__snapshots__/field-label.test.tsx.snap b/packages/discvr-ui-components/tests/__snapshots__/field-label.test.tsx.snap new file mode 100644 index 0000000..4f70b8a --- /dev/null +++ b/packages/discvr-ui-components/tests/__snapshots__/field-label.test.tsx.snap @@ -0,0 +1,59 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`FieldLabel test 1`] = ` +
+ + + + + +
+ + + Field + + +
+
+`; diff --git a/packages/discvr-ui-components/__snapshots__/field-type-info.test.tsx.snap b/packages/discvr-ui-components/tests/__snapshots__/field-type-info.test.tsx.snap similarity index 100% rename from packages/discvr-ui-components/__snapshots__/field-type-info.test.tsx.snap rename to packages/discvr-ui-components/tests/__snapshots__/field-type-info.test.tsx.snap diff --git a/packages/discvr-ui-components/tests/__snapshots__/operator-label.test.tsx.snap b/packages/discvr-ui-components/tests/__snapshots__/operator-label.test.tsx.snap new file mode 100644 index 0000000..cac10a7 --- /dev/null +++ b/packages/discvr-ui-components/tests/__snapshots__/operator-label.test.tsx.snap @@ -0,0 +1,59 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`OperatorLabel test 1`] = ` +
+ + + + + +
+ + + Operator + + +
+
+`; diff --git a/packages/discvr-ui-components/tests/field-label.test.tsx b/packages/discvr-ui-components/tests/field-label.test.tsx new file mode 100644 index 0000000..54cdd78 --- /dev/null +++ b/packages/discvr-ui-components/tests/field-label.test.tsx @@ -0,0 +1,81 @@ +import React from 'react'; +import {create} from 'react-test-renderer'; +import { FieldLabel } from '../src/field-label'; + + +export declare interface FieldModel { + name: string + label: string | undefined + description: string + type: string + isInDefaultColumns: boolean + isMultiValued: boolean + isHidden: boolean + colWidth: number + formatString: string + orderKey: number + allowableValues: string[] + category: string + url: string + flex: number + supportsFilter: boolean +} + +export declare interface FilterModel { + field: string; + operator: string; + value: string; +} + +it('FieldLabel test', () => { + const fieldTypeInfo:FieldModel[] = [{ + name: '', + label: '', + description: '', + type: '', + isInDefaultColumns: false, + isMultiValued: false, + isHidden: false, + colWidth: 0, + formatString: '', + orderKey: 0, + allowableValues: [], + category: '', + url: '', + flex: 0, + supportsFilter: false + }, + { + name: '', + label: '', + description: '', + type: '', + isInDefaultColumns: false, + isMultiValued: false, + isHidden: false, + colWidth: 0, + formatString: '', + orderKey: 0, + allowableValues: [], + category: '', + url: '', + flex: 0, + supportsFilter: false + }] + + const filter:FilterModel = { + field: '', + operator: '', + value: '' + } + + const component = create( + ({ field: "", operator: "", value: "" })} + index={0} + /> + ); + expect(component.toJSON()).toMatchSnapshot(); +}) \ No newline at end of file diff --git a/packages/discvr-ui-components/field-type-info.test.tsx b/packages/discvr-ui-components/tests/field-type-info.test.tsx similarity index 97% rename from packages/discvr-ui-components/field-type-info.test.tsx rename to packages/discvr-ui-components/tests/field-type-info.test.tsx index 72738d8..5b7a2b2 100644 --- a/packages/discvr-ui-components/field-type-info.test.tsx +++ b/packages/discvr-ui-components/tests/field-type-info.test.tsx @@ -1,6 +1,6 @@ import React from 'react'; import {create} from 'react-test-renderer'; -import { ValueComponent } from './field-type-info'; +import { ValueComponent } from '../src/field-type-info'; export declare interface FieldModel { name: string diff --git a/packages/discvr-ui-components/tests/operator-label.test.tsx b/packages/discvr-ui-components/tests/operator-label.test.tsx new file mode 100644 index 0000000..e3ed85a --- /dev/null +++ b/packages/discvr-ui-components/tests/operator-label.test.tsx @@ -0,0 +1,84 @@ +import React from 'react'; +import {create} from 'react-test-renderer'; +import { OperatorLabel } from '../src/operator-label'; + + +export declare interface FieldModel { + name: string + label: string | undefined + description: string + type: string + isInDefaultColumns: boolean + isMultiValued: boolean + isHidden: boolean + colWidth: number + formatString: string + orderKey: number + allowableValues: string[] + category: string + url: string + flex: number + supportsFilter: boolean +} + +export declare interface FilterModel { + field: string; + operator: string; + value: string; +} + +it('OperatorLabel test', () => { + const fieldTypeInfo:FieldModel[] = [{ + name: '', + label: '', + description: '', + type: '', + isInDefaultColumns: false, + isMultiValued: false, + isHidden: false, + colWidth: 0, + formatString: '', + orderKey: 0, + allowableValues: [], + category: '', + url: '', + flex: 0, + supportsFilter: false + }, + { + name: '', + label: '', + description: '', + type: '', + isInDefaultColumns: false, + isMultiValued: false, + isHidden: false, + colWidth: 0, + formatString: '', + orderKey: 0, + allowableValues: [], + category: '', + url: '', + flex: 0, + supportsFilter: false + }] + + const filter:FilterModel = { + field: '', + operator: '', + value: '' + } + +const component = create( + + (["",""])} + handleFilterChange={(_index: number, _key: string, _value: string | undefined) => ({ field: "", operator: "", value: "" })} + index={0} + /> + +) +expect(component.toJSON()).toMatchSnapshot(); +}) \ No newline at end of file