@pautena/react-design-system 0.14.1 → 0.14.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/action/cjs/index.js +1 -1
- package/action/cjs/index.js.map +1 -1
- package/action/index.js +1 -1
- package/action/index.js.map +1 -1
- package/autocomplete/autocomplete.d.ts +2 -1
- package/autocomplete/cjs/index.js +1 -23
- package/autocomplete/cjs/index.js.map +1 -1
- package/autocomplete/index.js +1 -23
- package/autocomplete/index.js.map +1 -1
- package/board/board.d.ts +1 -1
- package/board/cjs/index.js +1 -1
- package/board/cjs/index.js.map +1 -1
- package/board/index.js +1 -1
- package/board/index.js.map +1 -1
- package/bootstrap-dialog/cjs/index.js +1 -1
- package/bootstrap-dialog/cjs/index.js.map +1 -1
- package/bootstrap-dialog/index.js +1 -1
- package/bootstrap-dialog/index.js.map +1 -1
- package/bullet/bullet.d.ts +1 -1
- package/bullet/cjs/index.js +1 -1
- package/bullet/cjs/index.js.map +1 -1
- package/bullet/index.js +1 -1
- package/bullet/index.js.map +1 -1
- package/center-container/center-container.d.ts +1 -1
- package/center-container/cjs/index.js +1 -1
- package/center-container/cjs/index.js.map +1 -1
- package/center-container/index.js +1 -1
- package/center-container/index.js.map +1 -1
- package/cjs/index.js +4 -4
- package/cjs/index.js.map +1 -1
- package/confirm-dialog/cjs/index.js +1 -1
- package/confirm-dialog/cjs/index.js.map +1 -1
- package/confirm-dialog/index.js +1 -1
- package/confirm-dialog/index.js.map +1 -1
- package/content/cjs/index.js +1 -1
- package/content/cjs/index.js.map +1 -1
- package/content/index.js +1 -1
- package/content/index.js.map +1 -1
- package/content-placeholder/cjs/index.js +1 -1
- package/content-placeholder/cjs/index.js.map +1 -1
- package/content-placeholder/index.js +1 -1
- package/content-placeholder/index.js.map +1 -1
- package/date-range-calendar/cjs/index.js +1 -1
- package/date-range-calendar/cjs/index.js.map +1 -1
- package/date-range-calendar/index.js +1 -1
- package/date-range-calendar/index.js.map +1 -1
- package/date-range-picker/cjs/index.js +1 -1
- package/date-range-picker/cjs/index.js.map +1 -1
- package/date-range-picker/index.js +1 -1
- package/date-range-picker/index.js.map +1 -1
- package/drawer/cjs/index.js +1 -1
- package/drawer/cjs/index.js.map +1 -1
- package/drawer/drawer.d.ts +3 -3
- package/drawer/drawer.types.d.ts +2 -1
- package/drawer/index.js +1 -1
- package/drawer/index.js.map +1 -1
- package/drawer-app-bar/cjs/index.js +1 -1
- package/drawer-app-bar/cjs/index.js.map +1 -1
- package/drawer-app-bar/index.js +1 -1
- package/drawer-app-bar/index.js.map +1 -1
- package/drawer-content/cjs/index.js +1 -1
- package/drawer-content/cjs/index.js.map +1 -1
- package/drawer-content/drawer-content.d.ts +1 -1
- package/drawer-content/index.js +1 -1
- package/drawer-content/index.js.map +1 -1
- package/drawer-item/cjs/index.js +1 -1
- package/drawer-item/cjs/index.js.map +1 -1
- package/drawer-item/drawer-item-link.d.ts +2 -2
- package/drawer-item/drawer-item.d.ts +1 -1
- package/drawer-item/drawer-menu-item.d.ts +2 -2
- package/drawer-item/index.js +1 -1
- package/drawer-item/index.js.map +1 -1
- package/drawer-layout/cjs/index.js +1 -1
- package/drawer-layout/cjs/index.js.map +1 -1
- package/drawer-layout/drawer-layout.d.ts +2 -2
- package/drawer-layout/index.js +1 -1
- package/drawer-layout/index.js.map +1 -1
- package/drawer-main/cjs/index.js +1 -1
- package/drawer-main/cjs/index.js.map +1 -1
- package/drawer-main/index.js +1 -1
- package/drawer-main/index.js.map +1 -1
- package/drawer-provider/cjs/index.js +1 -1
- package/drawer-provider/cjs/index.js.map +1 -1
- package/drawer-provider/drawer-context.d.ts +1 -1
- package/drawer-provider/drawer.provider.d.ts +1 -1
- package/drawer-provider/index.js +1 -1
- package/drawer-provider/index.js.map +1 -1
- package/drawer-section/cjs/index.js +1 -1
- package/drawer-section/cjs/index.js.map +1 -1
- package/drawer-section/drawer-section.d.ts +1 -1
- package/drawer-section/index.js +1 -1
- package/drawer-section/index.js.map +1 -1
- package/drawer-subheader/cjs/index.js +1 -1
- package/drawer-subheader/cjs/index.js.map +1 -1
- package/drawer-subheader/drawer-subheader.d.ts +5 -5
- package/drawer-subheader/index.js +1 -1
- package/drawer-subheader/index.js.map +1 -1
- package/enhanced-remote-table/cjs/index.js +4 -4
- package/enhanced-remote-table/cjs/index.js.map +1 -1
- package/enhanced-remote-table/enhanced-remote-table.mock.d.ts +1 -1
- package/enhanced-remote-table/index.js +4 -4
- package/enhanced-remote-table/index.js.map +1 -1
- package/enhanced-table/cjs/index.js +4 -4
- package/enhanced-table/cjs/index.js.map +1 -1
- package/enhanced-table/index.js +4 -4
- package/enhanced-table/index.js.map +1 -1
- package/expandable-alert/cjs/index.js +1 -1
- package/expandable-alert/cjs/index.js.map +1 -1
- package/expandable-alert/expandable-alert.d.ts +3 -3
- package/expandable-alert/index.js +1 -1
- package/expandable-alert/index.js.map +1 -1
- package/form-dialog/cjs/index.js +1 -1
- package/form-dialog/cjs/index.js.map +1 -1
- package/form-dialog/form-dialog.d.ts +1 -1
- package/form-dialog/index.js +1 -1
- package/form-dialog/index.js.map +1 -1
- package/group-value-card/cjs/index.js +1 -1
- package/group-value-card/cjs/index.js.map +1 -1
- package/group-value-card/group-value-card.d.ts +1 -1
- package/group-value-card/index.js +1 -1
- package/group-value-card/index.js.map +1 -1
- package/header/cjs/index.js +1 -1
- package/header/cjs/index.js.map +1 -1
- package/header/index.js +1 -1
- package/header/index.js.map +1 -1
- package/header-layout/cjs/index.js +1 -1
- package/header-layout/cjs/index.js.map +1 -1
- package/header-layout/header-layout.d.ts +3 -3
- package/header-layout/index.js +1 -1
- package/header-layout/index.js.map +1 -1
- package/index.js +4 -4
- package/index.js.map +1 -1
- package/label/cjs/index.js +1 -1
- package/label/cjs/index.js.map +1 -1
- package/label/index.js +1 -1
- package/label/index.js.map +1 -1
- package/label/label.d.ts +1 -1
- package/link/cjs/index.js +1 -1
- package/link/cjs/index.js.map +1 -1
- package/link/index.js +1 -1
- package/link/index.js.map +1 -1
- package/link/link.d.ts +5 -5
- package/link-card/cjs/index.js +1 -1
- package/link-card/cjs/index.js.map +1 -1
- package/link-card/index.js +1 -1
- package/link-card/index.js.map +1 -1
- package/link-card/link-card.d.ts +1 -1
- package/list-panel/cjs/index.js +1 -1
- package/list-panel/cjs/index.js.map +1 -1
- package/list-panel/index.js +1 -1
- package/list-panel/index.js.map +1 -1
- package/loading-area/cjs/index.js +1 -1
- package/loading-area/cjs/index.js.map +1 -1
- package/loading-area/index.js +1 -1
- package/loading-area/index.js.map +1 -1
- package/lorem-ipsum-placeholder/cjs/index.js +1 -1
- package/lorem-ipsum-placeholder/cjs/index.js.map +1 -1
- package/lorem-ipsum-placeholder/index.js +1 -1
- package/lorem-ipsum-placeholder/index.js.map +1 -1
- package/markdown/cjs/index.js +1 -1
- package/markdown/cjs/index.js.map +1 -1
- package/markdown/index.js +1 -1
- package/markdown/index.js.map +1 -1
- package/model-form/cjs/index.js +1 -1
- package/model-form/cjs/index.js.map +1 -1
- package/model-form/index.js +1 -1
- package/model-form/index.js.map +1 -1
- package/model-form/model-form-field.d.ts +1 -1
- package/model-form/model-form.d.ts +1 -1
- package/model-router/cjs/index.js +4 -4
- package/model-router/cjs/index.js.map +1 -1
- package/model-router/index.js +4 -4
- package/model-router/index.js.map +1 -1
- package/model-router/model-router.d.ts +1 -1
- package/model-router/screens/add-screen.d.ts +2 -2
- package/model-router/screens/details-screen.d.ts +2 -2
- package/model-router/screens/list-screen.d.ts +2 -2
- package/model-router/screens/screens.types.d.ts +1 -1
- package/model-router/screens/update-screen.d.ts +2 -2
- package/notification-center/cjs/index.js +1 -1
- package/notification-center/cjs/index.js.map +1 -1
- package/notification-center/index.js +1 -1
- package/notification-center/index.js.map +1 -1
- package/notification-center/notification-center.context.d.ts +3 -3
- package/object-details/cjs/index.js +1 -1
- package/object-details/cjs/index.js.map +1 -1
- package/object-details/index.js +1 -1
- package/object-details/index.js.map +1 -1
- package/object-details/object-details.d.ts +1 -1
- package/package.json +1 -1
- package/placeholder/cjs/index.js +1 -1
- package/placeholder/cjs/index.js.map +1 -1
- package/placeholder/index.js +1 -1
- package/placeholder/index.js.map +1 -1
- package/query-container/cjs/index.js +1 -1
- package/query-container/cjs/index.js.map +1 -1
- package/query-container/index.js +1 -1
- package/query-container/index.js.map +1 -1
- package/search-input/cjs/index.js +1 -1
- package/search-input/cjs/index.js.map +1 -1
- package/search-input/index.js +1 -1
- package/search-input/index.js.map +1 -1
- package/search-input/search-input.d.ts +1 -1
- package/select/cjs/index.js +1 -1
- package/select/cjs/index.js.map +1 -1
- package/select/index.js +1 -1
- package/select/index.js.map +1 -1
- package/select/select.d.ts +2 -2
- package/sign-in/cjs/index.js +1 -1
- package/sign-in/cjs/index.js.map +1 -1
- package/sign-in/index.js +1 -1
- package/sign-in/index.js.map +1 -1
- package/skeleton-card/cjs/index.js +1 -1
- package/skeleton-card/cjs/index.js.map +1 -1
- package/skeleton-card/index.js +1 -1
- package/skeleton-card/index.js.map +1 -1
- package/skeleton-grid/cjs/index.js +1 -1
- package/skeleton-grid/cjs/index.js.map +1 -1
- package/skeleton-grid/index.js +1 -1
- package/skeleton-grid/index.js.map +1 -1
- package/tab-card/cjs/index.js +1 -1
- package/tab-card/cjs/index.js.map +1 -1
- package/tab-card/index.js +1 -1
- package/tab-card/index.js.map +1 -1
- package/tab-panel/cjs/index.js +1 -1
- package/tab-panel/cjs/index.js.map +1 -1
- package/tab-panel/index.js +1 -1
- package/tab-panel/index.js.map +1 -1
- package/tab-panel/tab-panel.d.ts +1 -1
- package/tab-provider/cjs/index.js +1 -1
- package/tab-provider/cjs/index.js.map +1 -1
- package/tab-provider/index.js +1 -1
- package/tab-provider/index.js.map +1 -1
- package/table-list/cjs/index.js +4 -4
- package/table-list/cjs/index.js.map +1 -1
- package/table-list/index.js +4 -4
- package/table-list/index.js.map +1 -1
- package/table-list/table-list.d.ts +1 -1
- package/text-field/cjs/index.js +1 -23
- package/text-field/cjs/index.js.map +1 -1
- package/text-field/index.js +1 -23
- package/text-field/index.js.map +1 -1
- package/text-field/text-field.d.ts +1 -1
- package/value-base/cjs/index.js +1 -1
- package/value-base/cjs/index.js.map +1 -1
- package/value-base/index.js +1 -1
- package/value-base/index.js.map +1 -1
- package/value-base/value-edit.d.ts +3 -3
- package/value-boolean/cjs/index.js +1 -1
- package/value-boolean/cjs/index.js.map +1 -1
- package/value-boolean/index.js +1 -1
- package/value-boolean/index.js.map +1 -1
- package/value-card/cjs/index.js +1 -1
- package/value-card/cjs/index.js.map +1 -1
- package/value-card/index.js +1 -1
- package/value-card/index.js.map +1 -1
- package/value-content/cjs/index.js +1 -1
- package/value-content/cjs/index.js.map +1 -1
- package/value-content/index.js +1 -1
- package/value-content/index.js.map +1 -1
- package/value-content/value-content.d.ts +2 -2
- package/value-datetime/cjs/index.js +1 -1
- package/value-datetime/cjs/index.js.map +1 -1
- package/value-datetime/index.js +1 -1
- package/value-datetime/index.js.map +1 -1
- package/value-datetime/value-datetime.d.ts +1 -1
- package/value-image/cjs/index.js +1 -1
- package/value-image/cjs/index.js.map +1 -1
- package/value-image/index.js +1 -1
- package/value-image/index.js.map +1 -1
- package/value-image/value-image.d.ts +1 -1
- package/value-item/cjs/index.js +1 -1
- package/value-item/cjs/index.js.map +1 -1
- package/value-item/index.js +1 -1
- package/value-item/index.js.map +1 -1
- package/value-item/value-item.d.ts +1 -1
- package/value-label/cjs/index.js +1 -1
- package/value-label/cjs/index.js.map +1 -1
- package/value-label/index.js +1 -1
- package/value-label/index.js.map +1 -1
- package/value-label/value-label.d.ts +1 -1
- package/value-rating/cjs/index.js +1 -1
- package/value-rating/cjs/index.js.map +1 -1
- package/value-rating/index.js +1 -1
- package/value-rating/index.js.map +1 -1
- package/value-rating/value-rating.d.ts +1 -1
- package/value-text/cjs/index.js +1 -1
- package/value-text/cjs/index.js.map +1 -1
- package/value-text/index.js +1 -1
- package/value-text/index.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/generators/generators.model.ts","../../../src/utils/theme.ts","../../../src/group-value-card/group-value-card.tsx","../../../src/model-form/model-form-field.tsx","../../../node_modules/ramda/es/internal/_isPlaceholder.js","../../../node_modules/ramda/es/internal/_curry1.js","../../../node_modules/ramda/es/internal/_curry2.js","../../../node_modules/ramda/es/internal/_curry3.js","../../../node_modules/ramda/es/internal/_isArray.js","../../../node_modules/ramda/es/internal/_isInteger.js","../../../node_modules/ramda/es/isNil.js","../../../node_modules/ramda/es/assocPath.js","../../../node_modules/ramda/es/internal/_has.js","../../../node_modules/ramda/es/internal/_assoc.js","../../../src/model-form/model-form.tsx"],"sourcesContent":["/**\n * MODEL TYPES\n * Types used to specify the model\n */\nexport type ModelFieldTypes =\n | \"string\"\n | \"number\"\n | \"string[]\"\n | \"number[]\"\n | \"boolean\"\n | \"enum\"\n | \"multienum\"\n | \"date\"\n | \"time\"\n | \"datetime\";\n\ntype Base = {\n id: string;\n description: string;\n name: string;\n listable?: boolean;\n updatable?: boolean;\n required?: boolean;\n};\n\ntype Breakpoints = {\n xs?: number;\n sm?: number;\n md?: number;\n lg?: number;\n xl?: number;\n};\n\ntype StringField = {\n type: \"string\";\n};\n\ntype StringArrayField = {\n type: \"string[]\";\n};\n\ntype NumberField = {\n type: \"number\";\n};\n\ntype NumberArrayField = {\n type: \"number[]\";\n};\n\ntype BooleanField = {\n type: \"boolean\";\n};\n\ntype EnumField = {\n type: \"enum\";\n value: string[];\n};\n\ntype MultiEnumField = {\n type: \"multienum\";\n value: string[];\n};\n\ntype DateField = {\n type: \"date\";\n format: string;\n default: Date;\n};\n\ntype TimeField = {\n type: \"time\";\n format: string;\n default: Date;\n};\n\ntype DatetimeField = {\n type: \"datetime\";\n format: string;\n default: Date;\n};\n\ntype SingleFields =\n | StringField\n | NumberField\n | StringArrayField\n | NumberArrayField\n | BooleanField\n | EnumField\n | MultiEnumField\n | DateField\n | TimeField\n | DatetimeField;\n\nexport type GroupField = {\n type: \"group\";\n value: (Base & Breakpoints & SingleFields)[];\n} & Base;\n\nexport type ArrayGroupField = {\n type: \"group[]\";\n value: (Base & Breakpoints & SingleFields)[];\n} & Base;\n\ntype Fields = SingleFields | GroupField | ArrayGroupField;\nexport type ModelField = Base & Breakpoints & Fields;\n\nexport type Model = {\n fields: ModelField[];\n};\n\n/**\n * INSTANCE TYPES\n * Types used to represent an instance of a model specification\n */\nexport type BaseFieldType = string | number | boolean | Date;\nexport type ArrayFieldType = string[] | number[];\nexport type SingleFieldType = BaseFieldType | ArrayFieldType;\nexport type GroupInstanceType = { [key: string]: SingleFieldType };\nexport type ArrayInstanceType = { [key: string]: SingleFieldType }[];\nexport type FieldType = SingleFieldType | GroupInstanceType;\n\nexport interface BasicModelInstance {\n id: string;\n [key: string]: FieldType;\n}\n\n/**\n * UTILITIES\n * Some functions used in several places to help to manage models\n */\nconst InitialStateZeroValue: Record<ModelFieldTypes | \"group\" | \"group[]\", FieldType | undefined> =\n {\n string: \"\",\n number: 0,\n boolean: false,\n enum: \"\",\n multienum: [],\n date: new Date(1970, 0, 1, 0, 0),\n time: new Date(1970, 0, 1, 0, 0),\n datetime: new Date(1970, 0, 1, 0, 0),\n group: {},\n \"group[]\": [],\n \"string[]\": [],\n \"number[]\": [],\n };\n\nconst getFieldValueOrZero = (\n field: ModelField,\n values: BasicModelInstance | GroupInstanceType | undefined,\n) => {\n return (\n (values && values[field.id]) ||\n (\"default\" in field && field.default) ||\n InitialStateZeroValue[field.type]\n );\n};\n\nexport const newInstanceFromValuesOrZeroValue = <T extends BasicModelInstance>(\n model: Model,\n values: T | undefined = undefined,\n): T => {\n const obj: Record<string, FieldType | undefined> = {};\n\n model.fields.forEach((field) => {\n if (field.type === \"group\") {\n const value: GroupInstanceType = {};\n field.value.forEach((groupField) => {\n value[groupField.id] = getFieldValueOrZero(\n groupField,\n values && (values[field.id] as GroupInstanceType),\n ) as SingleFieldType;\n });\n obj[field.id] = value;\n } else {\n obj[field.id] = getFieldValueOrZero(field, values);\n }\n });\n\n return obj as T;\n};\n","import { Color, useTheme } from \"@mui/material\";\n\ntype KeyColor = keyof Color;\n\nexport const useGetDefaultThemeColor = ({\n lightWeight = 100,\n darkWeight = 900,\n}: { lightWeight?: KeyColor; darkWeight?: KeyColor } = {}) => {\n const { palette } = useTheme();\n return palette.mode === \"light\" ? palette.grey[lightWeight] : palette.grey[darkWeight];\n};\n","import { Grid, Paper, Box, Typography, useTheme } from \"@mui/material\";\nimport React from \"react\";\nimport { useGetDefaultThemeColor } from \"../utils/theme\";\nimport { ValueItemElement } from \"../value-item/value-item\";\n\nexport interface GroupValueCardProps {\n title: string;\n subtitle?: string;\n centered?: boolean;\n children: ValueItemElement | ValueItemElement[];\n dense?: boolean;\n}\n\nexport const GroupValueCard = ({\n title,\n subtitle,\n centered,\n children,\n dense,\n}: GroupValueCardProps) => {\n const { typography } = useTheme();\n const defaultColor = useGetDefaultThemeColor({ lightWeight: 200, darkWeight: 800 });\n\n return (\n <Paper\n sx={{\n paddingBottom: dense ? 0 : 1,\n }}\n >\n <Box\n bgcolor={defaultColor}\n px={dense ? 1 : 2}\n py={dense ? 0.5 : 1}\n lineHeight={dense ? 0 : undefined}\n >\n <Typography variant={dense ? \"body1\" : \"h6\"} role=\"heading\" aria-level={1}>\n {title}\n </Typography>\n {subtitle && (\n <Typography\n variant={dense ? \"caption\" : \"body2\"}\n role=\"heading\"\n aria-level={2}\n lineHeight={dense ? typography.pxToRem(15) : undefined}\n >\n {subtitle}\n </Typography>\n )}\n </Box>\n <Grid\n container\n padding={1}\n rowSpacing={dense ? 1 : 2}\n justifyContent={centered ? \"center\" : \"flex-start\"}\n >\n {children}\n </Grid>\n </Paper>\n );\n};\n","import {\n Box,\n Grid,\n FormControlLabel,\n Checkbox,\n FormControl,\n InputLabel,\n Select,\n MenuItem,\n ListItemText,\n TextField,\n SelectChangeEvent,\n} from \"@mui/material\";\nimport { DesktopDatePicker, TimePicker, DateTimePicker } from \"@mui/x-date-pickers\";\nimport React, { ChangeEvent, ReactElement } from \"react\";\nimport { useGetDefaultThemeColor } from \"~/utils\";\nimport { GroupValueCard } from \"~/group-value-card\";\nimport {\n ArrayFieldType,\n FieldType,\n ModelField,\n ModelFieldTypes,\n} from \"~/generators/generators.model\";\n\nexport interface ModelFormField {\n field: ModelField;\n update: boolean;\n dense?: boolean;\n path?: string[];\n value: any;\n onChangeValue: (path: string[], value: any) => void;\n}\n\nexport const ModelFormField = ({\n field,\n path = [],\n value,\n dense,\n update,\n onChangeValue,\n}: ModelFormField) => {\n const handleCheckboxChange = (e: ChangeEvent<HTMLInputElement>) => {\n e.preventDefault();\n onChangeValue([...path, e.target.name], e.target.checked);\n };\n\n const handleSelectChange = (e: SelectChangeEvent<FieldType>) => {\n e.preventDefault();\n onChangeValue([...path, e.target.name], e.target.value);\n };\n\n const handleMultiSelectChange = (e: SelectChangeEvent<FieldType>) => {\n e.preventDefault();\n const { value } = e.target;\n const newValue = typeof value === \"string\" ? value.split(\",\") : value;\n onChangeValue([...path, e.target.name], newValue);\n };\n\n const handleInputChange = (\n e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>,\n type: ModelFieldTypes,\n ) => {\n e.preventDefault();\n\n let value: string | number | string[] | number[] = e.target.value;\n if (type === \"number\" && typeof value === \"string\") {\n value = parseInt(e.target.value, 10);\n } else if (type.includes(\"[]\")) {\n value = e.target.value.split(\",\");\n }\n onChangeValue([...path, e.target.name], value);\n };\n\n const handleDateChange = (value: FieldType | null, id: string) => {\n onChangeValue([...path, id], value);\n };\n\n const defaultColor = useGetDefaultThemeColor({ lightWeight: 200, darkWeight: 800 });\n\n const {\n id,\n type,\n name,\n description,\n updatable = true,\n required = true,\n xs,\n sm,\n md,\n lg,\n xl,\n } = field;\n const disabled: boolean = !updatable && update;\n\n let fieldInput: ReactElement;\n const size = dense ? \"small\" : \"medium\";\n if (type === \"group\") {\n fieldInput = (\n <GroupValueCard title={name} subtitle={description} dense={dense}>\n <Grid container spacing={2} sx={{ p: 2 }}>\n {field.value.map((f) => (\n <ModelFormField\n key={f.id}\n field={f}\n dense={dense}\n path={[...path, id]}\n value={value[f.id]}\n update={update}\n onChangeValue={onChangeValue}\n />\n ))}\n </Grid>\n </GroupValueCard>\n );\n } else if (type === \"boolean\") {\n fieldInput = (\n <Box sx={{ height: 1, display: \"flex\", alignItems: \"center\" }}>\n <FormControlLabel\n control={\n <Checkbox\n name={id}\n size={size}\n onChange={handleCheckboxChange}\n checked={value as boolean}\n disabled={disabled}\n />\n }\n label={name}\n />\n </Box>\n );\n } else if (type === \"enum\") {\n fieldInput = (\n <FormControl fullWidth>\n <InputLabel id={`${id}-select-label`}>{name}</InputLabel>\n <Select\n labelId={`${id}-select-label`}\n id={`${id}-select`}\n value={value}\n label={name}\n name={id}\n size={size}\n onChange={handleSelectChange}\n required={required}\n disabled={disabled}\n >\n {field.value.map((fieldValue) => (\n <MenuItem key={fieldValue} value={fieldValue}>\n {fieldValue}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n );\n } else if (type === \"multienum\") {\n fieldInput = (\n <FormControl fullWidth>\n <InputLabel id={`${id}-select-label`}>{name}</InputLabel>\n <Select\n labelId={`${id}-select-label`}\n id={`${id}-select`}\n value={value || []}\n renderValue={(selected) => (selected as ArrayFieldType).join(\", \")}\n label={name}\n name={id}\n size={size}\n onChange={handleMultiSelectChange}\n required={required}\n disabled={disabled}\n multiple\n >\n {field.value.map((fieldValue) => (\n <MenuItem key={fieldValue} value={fieldValue}>\n <Checkbox checked={((value as any[]) || []).includes(fieldValue)} />\n <ListItemText primary={fieldValue} />\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n );\n } else if (type === \"date\") {\n fieldInput = (\n <DesktopDatePicker\n label={name}\n format={field.format}\n value={value}\n slotProps={\n {\n field: {\n size,\n },\n } as any\n }\n disabled={disabled}\n onChange={(value) => handleDateChange(value, id)}\n />\n );\n } else if (type === \"time\") {\n fieldInput = (\n <TimePicker\n label={name}\n format={field.format}\n value={value}\n slotProps={\n {\n field: {\n size,\n },\n } as any\n }\n disabled={disabled}\n onChange={(value) => handleDateChange(value, id)}\n />\n );\n } else if (type === \"datetime\") {\n fieldInput = (\n <DateTimePicker\n label={name}\n format={field.format}\n value={value}\n slotProps={\n {\n field: {\n size,\n },\n } as any\n }\n disabled={disabled}\n onChange={(value) => handleDateChange(value, id)}\n />\n );\n } else if (type === \"group[]\") {\n return null;\n } else if (type.includes(\"[]\")) {\n fieldInput = (\n <TextField\n required={required}\n type=\"text\"\n label={name}\n name={id}\n size={size}\n variant=\"outlined\"\n helperText=\"Use comas to separate multiple values\"\n fullWidth\n disabled={disabled}\n value={(value as any[]).join(\",\")}\n onChange={(e) => handleInputChange(e, type)}\n />\n );\n } else {\n fieldInput = (\n <TextField\n required={required}\n type={type}\n label={name}\n size={size}\n name={id}\n variant=\"outlined\"\n fullWidth\n value={value}\n disabled={disabled}\n onChange={(e) => handleInputChange(e, type)}\n />\n );\n }\n\n return (\n <Grid item key={id} xs={xs} sm={sm} md={md} lg={lg} xl={xl}>\n {fieldInput}\n </Grid>\n );\n};\n","export default function _isPlaceholder(a) {\n return a != null && typeof a === 'object' && a['@@functional/placeholder'] === true;\n}","import _isPlaceholder from \"./_isPlaceholder.js\";\n/**\n * Optimized internal one-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\nexport default function _curry1(fn) {\n return function f1(a) {\n if (arguments.length === 0 || _isPlaceholder(a)) {\n return f1;\n } else {\n return fn.apply(this, arguments);\n }\n };\n}","import _curry1 from \"./_curry1.js\";\nimport _isPlaceholder from \"./_isPlaceholder.js\";\n/**\n * Optimized internal two-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\nexport default function _curry2(fn) {\n return function f2(a, b) {\n switch (arguments.length) {\n case 0:\n return f2;\n\n case 1:\n return _isPlaceholder(a) ? f2 : _curry1(function (_b) {\n return fn(a, _b);\n });\n\n default:\n return _isPlaceholder(a) && _isPlaceholder(b) ? f2 : _isPlaceholder(a) ? _curry1(function (_a) {\n return fn(_a, b);\n }) : _isPlaceholder(b) ? _curry1(function (_b) {\n return fn(a, _b);\n }) : fn(a, b);\n }\n };\n}","import _curry1 from \"./_curry1.js\";\nimport _curry2 from \"./_curry2.js\";\nimport _isPlaceholder from \"./_isPlaceholder.js\";\n/**\n * Optimized internal three-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\nexport default function _curry3(fn) {\n return function f3(a, b, c) {\n switch (arguments.length) {\n case 0:\n return f3;\n\n case 1:\n return _isPlaceholder(a) ? f3 : _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n });\n\n case 2:\n return _isPlaceholder(a) && _isPlaceholder(b) ? f3 : _isPlaceholder(a) ? _curry2(function (_a, _c) {\n return fn(_a, b, _c);\n }) : _isPlaceholder(b) ? _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n }) : _curry1(function (_c) {\n return fn(a, b, _c);\n });\n\n default:\n return _isPlaceholder(a) && _isPlaceholder(b) && _isPlaceholder(c) ? f3 : _isPlaceholder(a) && _isPlaceholder(b) ? _curry2(function (_a, _b) {\n return fn(_a, _b, c);\n }) : _isPlaceholder(a) && _isPlaceholder(c) ? _curry2(function (_a, _c) {\n return fn(_a, b, _c);\n }) : _isPlaceholder(b) && _isPlaceholder(c) ? _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n }) : _isPlaceholder(a) ? _curry1(function (_a) {\n return fn(_a, b, c);\n }) : _isPlaceholder(b) ? _curry1(function (_b) {\n return fn(a, _b, c);\n }) : _isPlaceholder(c) ? _curry1(function (_c) {\n return fn(a, b, _c);\n }) : fn(a, b, c);\n }\n };\n}","/**\n * Tests whether or not an object is an array.\n *\n * @private\n * @param {*} val The object to test.\n * @return {Boolean} `true` if `val` is an array, `false` otherwise.\n * @example\n *\n * _isArray([]); //=> true\n * _isArray(null); //=> false\n * _isArray({}); //=> false\n */\nexport default Array.isArray || function _isArray(val) {\n return val != null && val.length >= 0 && Object.prototype.toString.call(val) === '[object Array]';\n};","/**\n * Determine if the passed argument is an integer.\n *\n * @private\n * @param {*} n\n * @category Type\n * @return {Boolean}\n */\nexport default Number.isInteger || function _isInteger(n) {\n return n << 0 === n;\n};","import _curry1 from \"./internal/_curry1.js\";\n/**\n * Checks if the input value is `null` or `undefined`.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Type\n * @sig * -> Boolean\n * @param {*} x The value to test.\n * @return {Boolean} `true` if `x` is `undefined` or `null`, otherwise `false`.\n * @example\n *\n * R.isNil(null); //=> true\n * R.isNil(undefined); //=> true\n * R.isNil(0); //=> false\n * R.isNil([]); //=> false\n */\n\nvar isNil =\n/*#__PURE__*/\n_curry1(function isNil(x) {\n return x == null;\n});\n\nexport default isNil;","import _curry3 from \"./internal/_curry3.js\";\nimport _has from \"./internal/_has.js\";\nimport _isInteger from \"./internal/_isInteger.js\";\nimport _assoc from \"./internal/_assoc.js\";\nimport isNil from \"./isNil.js\";\n/**\n * Makes a shallow clone of an object, setting or overriding the nodes required\n * to create the given path, and placing the specific value at the tail end of\n * that path. Note that this copies and flattens prototype properties onto the\n * new object as well. All non-primitive properties are copied by reference.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Object\n * @typedefn Idx = String | Int | Symbol\n * @sig [Idx] -> a -> {a} -> {a}\n * @param {Array} path the path to set\n * @param {*} val The new value\n * @param {Object} obj The object to clone\n * @return {Object} A new object equivalent to the original except along the specified path.\n * @see R.dissocPath\n * @example\n *\n * R.assocPath(['a', 'b', 'c'], 42, {a: {b: {c: 0}}}); //=> {a: {b: {c: 42}}}\n *\n * // Any missing or non-object keys in path will be overridden\n * R.assocPath(['a', 'b', 'c'], 42, {a: 5}); //=> {a: {b: {c: 42}}}\n */\n\nvar assocPath =\n/*#__PURE__*/\n_curry3(function assocPath(path, val, obj) {\n if (path.length === 0) {\n return val;\n }\n\n var idx = path[0];\n\n if (path.length > 1) {\n var nextObj = !isNil(obj) && _has(idx, obj) && typeof obj[idx] === 'object' ? obj[idx] : _isInteger(path[1]) ? [] : {};\n val = assocPath(Array.prototype.slice.call(path, 1), val, nextObj);\n }\n\n return _assoc(idx, val, obj);\n});\n\nexport default assocPath;","export default function _has(prop, obj) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}","import _isArray from \"./_isArray.js\";\nimport _isInteger from \"./_isInteger.js\";\n/**\n * Makes a shallow clone of an object, setting or overriding the specified\n * property with the given value. Note that this copies and flattens prototype\n * properties onto the new object as well. All non-primitive properties are\n * copied by reference.\n *\n * @private\n * @param {String|Number} prop The property name to set\n * @param {*} val The new value\n * @param {Object|Array} obj The object to clone\n * @return {Object|Array} A new object equivalent to the original except for the changed property.\n */\n\nexport default function _assoc(prop, val, obj) {\n if (_isInteger(prop) && _isArray(obj)) {\n var arr = [].concat(obj);\n arr[prop] = val;\n return arr;\n }\n\n var result = {};\n\n for (var p in obj) {\n result[p] = obj[p];\n }\n\n result[prop] = val;\n return result;\n}","import { Button, Grid } from \"@mui/material\";\nimport React, { FormEvent, useMemo } from \"react\";\nimport { useState } from \"react\";\nimport {\n Model,\n BasicModelInstance,\n FieldType,\n newInstanceFromValuesOrZeroValue,\n} from \"../generators/generators.model\";\nimport { ModelFormField } from \"./model-form-field\";\nimport { assocPath } from \"ramda\";\n\nexport interface ModelFormProps<T extends BasicModelInstance> {\n model: Model;\n dense?: boolean;\n initialValues?: T;\n saveButtonText: string;\n onSubmit: (values: T) => void;\n}\n\nexport const ModelForm = <T extends BasicModelInstance>({\n model,\n saveButtonText,\n dense,\n onSubmit,\n initialValues,\n}: ModelFormProps<T>) => {\n const valuesInitialState = useMemo(\n () => newInstanceFromValuesOrZeroValue<T>(model, initialValues),\n [model, initialValues],\n );\n const [values, setValues] = useState<T>(valuesInitialState);\n\n const setKeyValue = (path: string[], value: FieldType | null) => {\n setValues((v) => assocPath(path, value, v));\n };\n\n const handleSubmit = (e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n onSubmit(values);\n };\n\n return (\n <Grid container component=\"form\" spacing={2} onSubmit={handleSubmit}>\n {model.fields.map((f) => (\n <ModelFormField\n key={f.id}\n dense={dense}\n field={f}\n value={values[f.id]}\n update={!!initialValues}\n onChangeValue={setKeyValue}\n />\n ))}\n <Grid item xs={12}>\n <Button type=\"submit\" variant=\"contained\" size={dense ? \"small\" : \"medium\"}>\n {saveButtonText}\n </Button>\n </Grid>\n </Grid>\n );\n};\n"],"names":["InitialStateZeroValue","string","number","boolean","enum","multienum","date","Date","time","datetime","group","getFieldValueOrZero","field","values","id","default","type","useGetDefaultThemeColor","lightWeight","darkWeight","palette","useTheme","mode","grey","GroupValueCard","title","subtitle","centered","children","dense","typography","defaultColor","React","createElement","Paper","sx","paddingBottom","Box","bgcolor","px","py","lineHeight","undefined","Typography","variant","role","pxToRem","Grid","container","padding","rowSpacing","justifyContent","ModelFormField","path","value","update","onChangeValue","handleCheckboxChange","e","preventDefault","target","name","checked","handleSelectChange","handleMultiSelectChange","newValue","split","handleInputChange","parseInt","includes","handleDateChange","description","updatable","required","xs","sm","md","lg","xl","disabled","fieldInput","size","spacing","p","map","f","key","height","display","alignItems","FormControlLabel","control","Checkbox","onChange","label","FormControl","fullWidth","InputLabel","Select","labelId","fieldValue","MenuItem","renderValue","selected","join","multiple","ListItemText","primary","DesktopDatePicker","format","slotProps","TimePicker","DateTimePicker","TextField","helperText","item","_isPlaceholder","a","_curry1","fn","f1","arguments","length","apply","this","_curry2","f2","b","_b","_a","_curry3","f3","c","_c","_isArray","Array","isArray","val","Object","prototype","toString","call","_isInteger","Number","isInteger","n","isNil","x","assocPath","obj","idx","nextObj","prop","hasOwnProperty","_has","slice","arr","concat","result","_assoc","model","saveButtonText","onSubmit","initialValues","valuesInitialState","useMemo","fields","forEach","groupField","newInstanceFromValuesOrZeroValue","setValues","useState","setKeyValue","v","component","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/generators/generators.model.ts","../../../src/utils/theme.ts","../../../src/group-value-card/group-value-card.tsx","../../../src/model-form/model-form-field.tsx","../../../node_modules/ramda/es/internal/_isPlaceholder.js","../../../node_modules/ramda/es/internal/_curry1.js","../../../node_modules/ramda/es/internal/_curry2.js","../../../node_modules/ramda/es/internal/_curry3.js","../../../node_modules/ramda/es/internal/_isArray.js","../../../node_modules/ramda/es/internal/_isInteger.js","../../../node_modules/ramda/es/isNil.js","../../../node_modules/ramda/es/assocPath.js","../../../node_modules/ramda/es/internal/_has.js","../../../node_modules/ramda/es/internal/_assoc.js","../../../src/model-form/model-form.tsx"],"sourcesContent":["/**\n * MODEL TYPES\n * Types used to specify the model\n */\nexport type ModelFieldTypes =\n | \"string\"\n | \"number\"\n | \"string[]\"\n | \"number[]\"\n | \"boolean\"\n | \"enum\"\n | \"multienum\"\n | \"date\"\n | \"time\"\n | \"datetime\";\n\ntype Base = {\n id: string;\n description: string;\n name: string;\n listable?: boolean;\n updatable?: boolean;\n required?: boolean;\n};\n\ntype Breakpoints = {\n xs?: number;\n sm?: number;\n md?: number;\n lg?: number;\n xl?: number;\n};\n\ntype StringField = {\n type: \"string\";\n};\n\ntype StringArrayField = {\n type: \"string[]\";\n};\n\ntype NumberField = {\n type: \"number\";\n};\n\ntype NumberArrayField = {\n type: \"number[]\";\n};\n\ntype BooleanField = {\n type: \"boolean\";\n};\n\ntype EnumField = {\n type: \"enum\";\n value: string[];\n};\n\ntype MultiEnumField = {\n type: \"multienum\";\n value: string[];\n};\n\ntype DateField = {\n type: \"date\";\n format: string;\n default: Date;\n};\n\ntype TimeField = {\n type: \"time\";\n format: string;\n default: Date;\n};\n\ntype DatetimeField = {\n type: \"datetime\";\n format: string;\n default: Date;\n};\n\ntype SingleFields =\n | StringField\n | NumberField\n | StringArrayField\n | NumberArrayField\n | BooleanField\n | EnumField\n | MultiEnumField\n | DateField\n | TimeField\n | DatetimeField;\n\nexport type GroupField = {\n type: \"group\";\n value: (Base & Breakpoints & SingleFields)[];\n} & Base;\n\nexport type ArrayGroupField = {\n type: \"group[]\";\n value: (Base & Breakpoints & SingleFields)[];\n} & Base;\n\ntype Fields = SingleFields | GroupField | ArrayGroupField;\nexport type ModelField = Base & Breakpoints & Fields;\n\nexport type Model = {\n fields: ModelField[];\n};\n\n/**\n * INSTANCE TYPES\n * Types used to represent an instance of a model specification\n */\nexport type BaseFieldType = string | number | boolean | Date;\nexport type ArrayFieldType = string[] | number[];\nexport type SingleFieldType = BaseFieldType | ArrayFieldType;\nexport type GroupInstanceType = { [key: string]: SingleFieldType };\nexport type ArrayInstanceType = { [key: string]: SingleFieldType }[];\nexport type FieldType = SingleFieldType | GroupInstanceType;\n\nexport interface BasicModelInstance {\n id: string;\n [key: string]: FieldType;\n}\n\n/**\n * UTILITIES\n * Some functions used in several places to help to manage models\n */\nconst InitialStateZeroValue: Record<ModelFieldTypes | \"group\" | \"group[]\", FieldType | undefined> =\n {\n string: \"\",\n number: 0,\n boolean: false,\n enum: \"\",\n multienum: [],\n date: new Date(1970, 0, 1, 0, 0),\n time: new Date(1970, 0, 1, 0, 0),\n datetime: new Date(1970, 0, 1, 0, 0),\n group: {},\n \"group[]\": [],\n \"string[]\": [],\n \"number[]\": [],\n };\n\nconst getFieldValueOrZero = (\n field: ModelField,\n values: BasicModelInstance | GroupInstanceType | undefined,\n) => {\n return (\n (values && values[field.id]) ||\n (\"default\" in field && field.default) ||\n InitialStateZeroValue[field.type]\n );\n};\n\nexport const newInstanceFromValuesOrZeroValue = <T extends BasicModelInstance>(\n model: Model,\n values: T | undefined = undefined,\n): T => {\n const obj: Record<string, FieldType | undefined> = {};\n\n model.fields.forEach((field) => {\n if (field.type === \"group\") {\n const value: GroupInstanceType = {};\n field.value.forEach((groupField) => {\n value[groupField.id] = getFieldValueOrZero(\n groupField,\n values && (values[field.id] as GroupInstanceType),\n ) as SingleFieldType;\n });\n obj[field.id] = value;\n } else {\n obj[field.id] = getFieldValueOrZero(field, values);\n }\n });\n\n return obj as T;\n};\n","import { Color, useTheme } from \"@mui/material\";\n\ntype KeyColor = keyof Color;\n\nexport const useGetDefaultThemeColor = ({\n lightWeight = 100,\n darkWeight = 900,\n}: { lightWeight?: KeyColor; darkWeight?: KeyColor } = {}) => {\n const { palette } = useTheme();\n return palette.mode === \"light\" ? palette.grey[lightWeight] : palette.grey[darkWeight];\n};\n","import Grid from \"@mui/material/Grid\";\nimport Paper from \"@mui/material/Paper\";\nimport Box from \"@mui/material/Box\";\nimport Typography from \"@mui/material/Typography\";\nimport { useTheme } from \"@mui/material/styles\";\nimport { useGetDefaultThemeColor } from \"../utils\";\nimport { ValueItemElement } from \"../value-item\";\n\nexport interface GroupValueCardProps {\n title: string;\n subtitle?: string;\n centered?: boolean;\n children: ValueItemElement | ValueItemElement[];\n dense?: boolean;\n}\n\nexport const GroupValueCard = ({\n title,\n subtitle,\n centered,\n children,\n dense,\n}: GroupValueCardProps) => {\n const { typography } = useTheme();\n const defaultColor = useGetDefaultThemeColor({ lightWeight: 200, darkWeight: 800 });\n\n return (\n <Paper\n sx={{\n paddingBottom: dense ? 0 : 1,\n }}\n >\n <Box\n bgcolor={defaultColor}\n px={dense ? 1 : 2}\n py={dense ? 0.5 : 1}\n lineHeight={dense ? 0 : undefined}\n >\n <Typography variant={dense ? \"body1\" : \"h6\"} role=\"heading\" aria-level={1}>\n {title}\n </Typography>\n {subtitle && (\n <Typography\n variant={dense ? \"caption\" : \"body2\"}\n role=\"heading\"\n aria-level={2}\n lineHeight={dense ? typography.pxToRem(15) : undefined}\n >\n {subtitle}\n </Typography>\n )}\n </Box>\n <Grid\n container\n padding={1}\n rowSpacing={dense ? 1 : 2}\n justifyContent={centered ? \"center\" : \"flex-start\"}\n >\n {children}\n </Grid>\n </Paper>\n );\n};\n","import Box from \"@mui/material/Box\";\nimport Grid from \"@mui/material/Grid\";\nimport FormControlLabel from \"@mui/material/FormControlLabel\";\nimport Checkbox from \"@mui/material/Checkbox\";\nimport FormControl from \"@mui/material/FormControl\";\nimport InputLabel from \"@mui/material/InputLabel\";\nimport Select from \"@mui/material/Select\";\nimport MenuItem from \"@mui/material/MenuItem\";\nimport ListItemText from \"@mui/material/ListItemText\";\nimport TextField from \"@mui/material/TextField\";\nimport { SelectChangeEvent } from \"@mui/material/Select\";\nimport { DesktopDatePicker, TimePicker, DateTimePicker } from \"@mui/x-date-pickers\";\nimport { ChangeEvent, ReactElement } from \"react\";\nimport { useGetDefaultThemeColor } from \"../utils\";\nimport { GroupValueCard } from \"../group-value-card\";\nimport {\n ArrayFieldType,\n FieldType,\n ModelField,\n ModelFieldTypes,\n} from \"../generators/generators.model\";\n\nexport interface ModelFormField {\n field: ModelField;\n update: boolean;\n dense?: boolean;\n path?: string[];\n value: any;\n onChangeValue: (path: string[], value: any) => void;\n}\n\nexport const ModelFormField = ({\n field,\n path = [],\n value,\n dense,\n update,\n onChangeValue,\n}: ModelFormField) => {\n const handleCheckboxChange = (e: ChangeEvent<HTMLInputElement>) => {\n e.preventDefault();\n onChangeValue([...path, e.target.name], e.target.checked);\n };\n\n const handleSelectChange = (e: SelectChangeEvent<FieldType>) => {\n e.preventDefault();\n onChangeValue([...path, e.target.name], e.target.value);\n };\n\n const handleMultiSelectChange = (e: SelectChangeEvent<FieldType>) => {\n e.preventDefault();\n const { value } = e.target;\n const newValue = typeof value === \"string\" ? value.split(\",\") : value;\n onChangeValue([...path, e.target.name], newValue);\n };\n\n const handleInputChange = (\n e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>,\n type: ModelFieldTypes,\n ) => {\n e.preventDefault();\n\n let value: string | number | string[] | number[] = e.target.value;\n if (type === \"number\" && typeof value === \"string\") {\n value = parseInt(e.target.value, 10);\n } else if (type.includes(\"[]\")) {\n value = e.target.value.split(\",\");\n }\n onChangeValue([...path, e.target.name], value);\n };\n\n const handleDateChange = (value: FieldType | null, id: string) => {\n onChangeValue([...path, id], value);\n };\n\n const defaultColor = useGetDefaultThemeColor({ lightWeight: 200, darkWeight: 800 });\n\n const {\n id,\n type,\n name,\n description,\n updatable = true,\n required = true,\n xs,\n sm,\n md,\n lg,\n xl,\n } = field;\n const disabled: boolean = !updatable && update;\n\n let fieldInput: ReactElement;\n const size = dense ? \"small\" : \"medium\";\n if (type === \"group\") {\n fieldInput = (\n <GroupValueCard title={name} subtitle={description} dense={dense}>\n <Grid container spacing={2} sx={{ p: 2 }}>\n {field.value.map((f) => (\n <ModelFormField\n key={f.id}\n field={f}\n dense={dense}\n path={[...path, id]}\n value={value[f.id]}\n update={update}\n onChangeValue={onChangeValue}\n />\n ))}\n </Grid>\n </GroupValueCard>\n );\n } else if (type === \"boolean\") {\n fieldInput = (\n <Box sx={{ height: 1, display: \"flex\", alignItems: \"center\" }}>\n <FormControlLabel\n control={\n <Checkbox\n name={id}\n size={size}\n onChange={handleCheckboxChange}\n checked={value as boolean}\n disabled={disabled}\n />\n }\n label={name}\n />\n </Box>\n );\n } else if (type === \"enum\") {\n fieldInput = (\n <FormControl fullWidth>\n <InputLabel id={`${id}-select-label`}>{name}</InputLabel>\n <Select\n labelId={`${id}-select-label`}\n id={`${id}-select`}\n value={value}\n label={name}\n name={id}\n size={size}\n onChange={handleSelectChange}\n required={required}\n disabled={disabled}\n >\n {field.value.map((fieldValue) => (\n <MenuItem key={fieldValue} value={fieldValue}>\n {fieldValue}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n );\n } else if (type === \"multienum\") {\n fieldInput = (\n <FormControl fullWidth>\n <InputLabel id={`${id}-select-label`}>{name}</InputLabel>\n <Select\n labelId={`${id}-select-label`}\n id={`${id}-select`}\n value={value || []}\n renderValue={(selected) => (selected as ArrayFieldType).join(\", \")}\n label={name}\n name={id}\n size={size}\n onChange={handleMultiSelectChange}\n required={required}\n disabled={disabled}\n multiple\n >\n {field.value.map((fieldValue) => (\n <MenuItem key={fieldValue} value={fieldValue}>\n <Checkbox checked={((value as any[]) || []).includes(fieldValue)} />\n <ListItemText primary={fieldValue} />\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n );\n } else if (type === \"date\") {\n fieldInput = (\n <DesktopDatePicker\n label={name}\n format={field.format}\n value={value}\n slotProps={\n {\n field: {\n size,\n },\n } as any\n }\n disabled={disabled}\n onChange={(value) => handleDateChange(value, id)}\n />\n );\n } else if (type === \"time\") {\n fieldInput = (\n <TimePicker\n label={name}\n format={field.format}\n value={value}\n slotProps={\n {\n field: {\n size,\n },\n } as any\n }\n disabled={disabled}\n onChange={(value) => handleDateChange(value, id)}\n />\n );\n } else if (type === \"datetime\") {\n fieldInput = (\n <DateTimePicker\n label={name}\n format={field.format}\n value={value}\n slotProps={\n {\n field: {\n size,\n },\n } as any\n }\n disabled={disabled}\n onChange={(value) => handleDateChange(value, id)}\n />\n );\n } else if (type === \"group[]\") {\n return null;\n } else if (type.includes(\"[]\")) {\n fieldInput = (\n <TextField\n required={required}\n type=\"text\"\n label={name}\n name={id}\n size={size}\n variant=\"outlined\"\n helperText=\"Use comas to separate multiple values\"\n fullWidth\n disabled={disabled}\n value={(value as any[]).join(\",\")}\n onChange={(e) => handleInputChange(e, type)}\n />\n );\n } else {\n fieldInput = (\n <TextField\n required={required}\n type={type}\n label={name}\n size={size}\n name={id}\n variant=\"outlined\"\n fullWidth\n value={value}\n disabled={disabled}\n onChange={(e) => handleInputChange(e, type)}\n />\n );\n }\n\n return (\n <Grid item key={id} xs={xs} sm={sm} md={md} lg={lg} xl={xl}>\n {fieldInput}\n </Grid>\n );\n};\n","export default function _isPlaceholder(a) {\n return a != null && typeof a === 'object' && a['@@functional/placeholder'] === true;\n}","import _isPlaceholder from \"./_isPlaceholder.js\";\n/**\n * Optimized internal one-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\nexport default function _curry1(fn) {\n return function f1(a) {\n if (arguments.length === 0 || _isPlaceholder(a)) {\n return f1;\n } else {\n return fn.apply(this, arguments);\n }\n };\n}","import _curry1 from \"./_curry1.js\";\nimport _isPlaceholder from \"./_isPlaceholder.js\";\n/**\n * Optimized internal two-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\nexport default function _curry2(fn) {\n return function f2(a, b) {\n switch (arguments.length) {\n case 0:\n return f2;\n\n case 1:\n return _isPlaceholder(a) ? f2 : _curry1(function (_b) {\n return fn(a, _b);\n });\n\n default:\n return _isPlaceholder(a) && _isPlaceholder(b) ? f2 : _isPlaceholder(a) ? _curry1(function (_a) {\n return fn(_a, b);\n }) : _isPlaceholder(b) ? _curry1(function (_b) {\n return fn(a, _b);\n }) : fn(a, b);\n }\n };\n}","import _curry1 from \"./_curry1.js\";\nimport _curry2 from \"./_curry2.js\";\nimport _isPlaceholder from \"./_isPlaceholder.js\";\n/**\n * Optimized internal three-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\nexport default function _curry3(fn) {\n return function f3(a, b, c) {\n switch (arguments.length) {\n case 0:\n return f3;\n\n case 1:\n return _isPlaceholder(a) ? f3 : _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n });\n\n case 2:\n return _isPlaceholder(a) && _isPlaceholder(b) ? f3 : _isPlaceholder(a) ? _curry2(function (_a, _c) {\n return fn(_a, b, _c);\n }) : _isPlaceholder(b) ? _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n }) : _curry1(function (_c) {\n return fn(a, b, _c);\n });\n\n default:\n return _isPlaceholder(a) && _isPlaceholder(b) && _isPlaceholder(c) ? f3 : _isPlaceholder(a) && _isPlaceholder(b) ? _curry2(function (_a, _b) {\n return fn(_a, _b, c);\n }) : _isPlaceholder(a) && _isPlaceholder(c) ? _curry2(function (_a, _c) {\n return fn(_a, b, _c);\n }) : _isPlaceholder(b) && _isPlaceholder(c) ? _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n }) : _isPlaceholder(a) ? _curry1(function (_a) {\n return fn(_a, b, c);\n }) : _isPlaceholder(b) ? _curry1(function (_b) {\n return fn(a, _b, c);\n }) : _isPlaceholder(c) ? _curry1(function (_c) {\n return fn(a, b, _c);\n }) : fn(a, b, c);\n }\n };\n}","/**\n * Tests whether or not an object is an array.\n *\n * @private\n * @param {*} val The object to test.\n * @return {Boolean} `true` if `val` is an array, `false` otherwise.\n * @example\n *\n * _isArray([]); //=> true\n * _isArray(null); //=> false\n * _isArray({}); //=> false\n */\nexport default Array.isArray || function _isArray(val) {\n return val != null && val.length >= 0 && Object.prototype.toString.call(val) === '[object Array]';\n};","/**\n * Determine if the passed argument is an integer.\n *\n * @private\n * @param {*} n\n * @category Type\n * @return {Boolean}\n */\nexport default Number.isInteger || function _isInteger(n) {\n return n << 0 === n;\n};","import _curry1 from \"./internal/_curry1.js\";\n/**\n * Checks if the input value is `null` or `undefined`.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Type\n * @sig * -> Boolean\n * @param {*} x The value to test.\n * @return {Boolean} `true` if `x` is `undefined` or `null`, otherwise `false`.\n * @example\n *\n * R.isNil(null); //=> true\n * R.isNil(undefined); //=> true\n * R.isNil(0); //=> false\n * R.isNil([]); //=> false\n */\n\nvar isNil =\n/*#__PURE__*/\n_curry1(function isNil(x) {\n return x == null;\n});\n\nexport default isNil;","import _curry3 from \"./internal/_curry3.js\";\nimport _has from \"./internal/_has.js\";\nimport _isInteger from \"./internal/_isInteger.js\";\nimport _assoc from \"./internal/_assoc.js\";\nimport isNil from \"./isNil.js\";\n/**\n * Makes a shallow clone of an object, setting or overriding the nodes required\n * to create the given path, and placing the specific value at the tail end of\n * that path. Note that this copies and flattens prototype properties onto the\n * new object as well. All non-primitive properties are copied by reference.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Object\n * @typedefn Idx = String | Int | Symbol\n * @sig [Idx] -> a -> {a} -> {a}\n * @param {Array} path the path to set\n * @param {*} val The new value\n * @param {Object} obj The object to clone\n * @return {Object} A new object equivalent to the original except along the specified path.\n * @see R.dissocPath\n * @example\n *\n * R.assocPath(['a', 'b', 'c'], 42, {a: {b: {c: 0}}}); //=> {a: {b: {c: 42}}}\n *\n * // Any missing or non-object keys in path will be overridden\n * R.assocPath(['a', 'b', 'c'], 42, {a: 5}); //=> {a: {b: {c: 42}}}\n */\n\nvar assocPath =\n/*#__PURE__*/\n_curry3(function assocPath(path, val, obj) {\n if (path.length === 0) {\n return val;\n }\n\n var idx = path[0];\n\n if (path.length > 1) {\n var nextObj = !isNil(obj) && _has(idx, obj) && typeof obj[idx] === 'object' ? obj[idx] : _isInteger(path[1]) ? [] : {};\n val = assocPath(Array.prototype.slice.call(path, 1), val, nextObj);\n }\n\n return _assoc(idx, val, obj);\n});\n\nexport default assocPath;","export default function _has(prop, obj) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}","import _isArray from \"./_isArray.js\";\nimport _isInteger from \"./_isInteger.js\";\n/**\n * Makes a shallow clone of an object, setting or overriding the specified\n * property with the given value. Note that this copies and flattens prototype\n * properties onto the new object as well. All non-primitive properties are\n * copied by reference.\n *\n * @private\n * @param {String|Number} prop The property name to set\n * @param {*} val The new value\n * @param {Object|Array} obj The object to clone\n * @return {Object|Array} A new object equivalent to the original except for the changed property.\n */\n\nexport default function _assoc(prop, val, obj) {\n if (_isInteger(prop) && _isArray(obj)) {\n var arr = [].concat(obj);\n arr[prop] = val;\n return arr;\n }\n\n var result = {};\n\n for (var p in obj) {\n result[p] = obj[p];\n }\n\n result[prop] = val;\n return result;\n}","import Button from \"@mui/material/Button\";\nimport Grid from \"@mui/material/Grid\";\nimport { FormEvent, useMemo } from \"react\";\nimport { useState } from \"react\";\nimport {\n Model,\n BasicModelInstance,\n FieldType,\n newInstanceFromValuesOrZeroValue,\n} from \"../generators\";\nimport { ModelFormField } from \"./model-form-field\";\nimport { assocPath } from \"ramda\";\n\nexport interface ModelFormProps<T extends BasicModelInstance> {\n model: Model;\n dense?: boolean;\n initialValues?: T;\n saveButtonText: string;\n onSubmit: (values: T) => void;\n}\n\nexport const ModelForm = <T extends BasicModelInstance>({\n model,\n saveButtonText,\n dense,\n onSubmit,\n initialValues,\n}: ModelFormProps<T>) => {\n const valuesInitialState = useMemo(\n () => newInstanceFromValuesOrZeroValue<T>(model, initialValues),\n [model, initialValues],\n );\n const [values, setValues] = useState<T>(valuesInitialState);\n\n const setKeyValue = (path: string[], value: FieldType | null) => {\n setValues((v) => assocPath(path, value, v));\n };\n\n const handleSubmit = (e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n onSubmit(values);\n };\n\n return (\n <Grid container component=\"form\" spacing={2} onSubmit={handleSubmit}>\n {model.fields.map((f) => (\n <ModelFormField\n key={f.id}\n dense={dense}\n field={f}\n value={values[f.id]}\n update={!!initialValues}\n onChangeValue={setKeyValue}\n />\n ))}\n <Grid item xs={12}>\n <Button type=\"submit\" variant=\"contained\" size={dense ? \"small\" : \"medium\"}>\n {saveButtonText}\n </Button>\n </Grid>\n </Grid>\n );\n};\n"],"names":["InitialStateZeroValue","string","number","boolean","enum","multienum","date","Date","time","datetime","group","getFieldValueOrZero","field","values","id","default","type","useGetDefaultThemeColor","lightWeight","darkWeight","palette","useTheme","mode","grey","GroupValueCard","title","subtitle","centered","children","dense","typography","defaultColor","_jsxs","jsxs","Paper","sx","paddingBottom","Box","bgcolor","px","py","lineHeight","undefined","_jsx","jsx","Typography","variant","role","pxToRem","Grid","container","padding","rowSpacing","justifyContent","ModelFormField","path","value","update","onChangeValue","handleCheckboxChange","e","preventDefault","target","name","checked","handleSelectChange","handleMultiSelectChange","newValue","split","handleInputChange","parseInt","includes","handleDateChange","description","updatable","required","xs","sm","md","lg","xl","disabled","fieldInput","size","spacing","p","map","f","height","display","alignItems","FormControlLabel","control","Checkbox","onChange","label","FormControl","fullWidth","InputLabel","Select","labelId","fieldValue","MenuItem","renderValue","selected","join","multiple","ListItemText","primary","DesktopDatePicker","format","slotProps","TimePicker","DateTimePicker","TextField","helperText","item","_isPlaceholder","a","_curry1","fn","f1","arguments","length","apply","this","_curry2","f2","b","_b","_a","_curry3","f3","c","_c","_isArray","Array","isArray","val","Object","prototype","toString","call","_isInteger","Number","isInteger","n","isNil","x","assocPath","obj","idx","nextObj","prop","hasOwnProperty","_has","slice","arr","concat","result","_assoc","model","saveButtonText","onSubmit","initialValues","valuesInitialState","useMemo","fields","forEach","groupField","newInstanceFromValuesOrZeroValue","setValues","useState","setKeyValue","v","component","Button"],"mappings":"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"}
|
package/model-form/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{jsxs as e,jsx as t}from"react/jsx-runtime";import r from"@mui/material/Button";import n from"@mui/material/Grid";import{useMemo as i,useState as l}from"react";import a from"@mui/material/Box";import o from"@mui/material/FormControlLabel";import u from"@mui/material/Checkbox";import m from"@mui/material/FormControl";import d from"@mui/material/InputLabel";import c from"@mui/material/Select";import s from"@mui/material/MenuItem";import f from"@mui/material/ListItemText";import p from"@mui/material/TextField";import{DesktopDatePicker as h,TimePicker as g,DateTimePicker as b}from"@mui/x-date-pickers";import{useTheme as v}from"@mui/material";import y from"@mui/material/Paper";import x from"@mui/material/Typography";import{useTheme as C}from"@mui/material/styles";const W={string:"",number:0,boolean:!1,enum:"",multienum:[],date:new Date(1970,0,1,0,0),time:new Date(1970,0,1,0,0),datetime:new Date(1970,0,1,0,0),group:{},"group[]":[],"string[]":[],"number[]":[]},j=(e,t)=>t&&t[e.id]||"default"in e&&e.default||W[e.type],z=({lightWeight:e=100,darkWeight:t=900}={})=>{const{palette:r}=v();return"light"===r.mode?r.grey[e]:r.grey[t]},k=({title:r,subtitle:i,centered:l,children:o,dense:u})=>{const{typography:m}=C(),d=z({lightWeight:200,darkWeight:800});return e(y,{sx:{paddingBottom:u?0:1},children:[e(a,{bgcolor:d,px:u?1:2,py:u?.5:1,lineHeight:u?0:void 0,children:[t(x,{variant:u?"body1":"h6",role:"heading","aria-level":1,children:r}),i&&t(x,{variant:u?"caption":"body2",role:"heading","aria-level":2,lineHeight:u?m.pxToRem(15):void 0,children:i})]}),t(n,{container:!0,padding:1,rowSpacing:u?1:2,justifyContent:l?"center":"flex-start",children:o})]})},D=({field:r,path:i=[],value:l,dense:v,update:y,onChangeValue:x})=>{const C=e=>{e.preventDefault(),x([...i,e.target.name],e.target.checked)},W=e=>{e.preventDefault(),x([...i,e.target.name],e.target.value)},j=e=>{e.preventDefault();const{value:t}=e.target,r="string"==typeof t?t.split(","):t;x([...i,e.target.name],r)},I=(e,t)=>{e.preventDefault();let r=e.target.value;"number"===t&&"string"==typeof r?r=parseInt(e.target.value,10):t.includes("[]")&&(r=e.target.value.split(",")),x([...i,e.target.name],r)},w=(e,t)=>{x([...i,t],e)};z({lightWeight:200,darkWeight:800});const{id:T,type:$,name:q,description:P,updatable:S=!0,required:V=!0,xs:A,sm:B,md:F,lg:L,xl:O}=r,E=!S&&y;let H;const G=v?"small":"medium";if("group"===$)H=t(k,{title:q,subtitle:P,dense:v,children:t(n,{container:!0,spacing:2,sx:{p:2},children:r.value.map((e=>t(D,{field:e,dense:v,path:[...i,T],value:l[e.id],update:y,onChangeValue:x},e.id)))})});else if("boolean"===$)H=t(a,{sx:{height:1,display:"flex",alignItems:"center"},children:t(o,{control:t(u,{name:T,size:G,onChange:C,checked:l,disabled:E}),label:q})});else if("enum"===$)H=e(m,{fullWidth:!0,children:[t(d,{id:`${T}-select-label`,children:q}),t(c,{labelId:`${T}-select-label`,id:`${T}-select`,value:l,label:q,name:T,size:G,onChange:W,required:V,disabled:E,children:r.value.map((e=>t(s,{value:e,children:e},e)))})]});else if("multienum"===$)H=e(m,{fullWidth:!0,children:[t(d,{id:`${T}-select-label`,children:q}),t(c,{labelId:`${T}-select-label`,id:`${T}-select`,value:l||[],renderValue:e=>e.join(", "),label:q,name:T,size:G,onChange:j,required:V,disabled:E,multiple:!0,children:r.value.map((r=>e(s,{value:r,children:[t(u,{checked:(l||[]).includes(r)}),t(f,{primary:r})]},r)))})]});else if("date"===$)H=t(h,{label:q,format:r.format,value:l,slotProps:{field:{size:G}},disabled:E,onChange:e=>w(e,T)});else if("time"===$)H=t(g,{label:q,format:r.format,value:l,slotProps:{field:{size:G}},disabled:E,onChange:e=>w(e,T)});else if("datetime"===$)H=t(b,{label:q,format:r.format,value:l,slotProps:{field:{size:G}},disabled:E,onChange:e=>w(e,T)});else{if("group[]"===$)return null;H=$.includes("[]")?t(p,{required:V,type:"text",label:q,name:T,size:G,variant:"outlined",helperText:"Use comas to separate multiple values",fullWidth:!0,disabled:E,value:l.join(","),onChange:e=>I(e,$)}):t(p,{required:V,type:$,label:q,size:G,name:T,variant:"outlined",fullWidth:!0,value:l,disabled:E,onChange:e=>I(e,$)})}return t(n,{item:!0,xs:A,sm:B,md:F,lg:L,xl:O,children:H},T)};function I(e){return null!=e&&"object"==typeof e&&!0===e["@@functional/placeholder"]}function w(e){return function t(r){return 0===arguments.length||I(r)?t:e.apply(this,arguments)}}function T(e){return function t(r,n){switch(arguments.length){case 0:return t;case 1:return I(r)?t:w((function(t){return e(r,t)}));default:return I(r)&&I(n)?t:I(r)?w((function(t){return e(t,n)})):I(n)?w((function(t){return e(r,t)})):e(r,n)}}}function $(e){return function t(r,n,i){switch(arguments.length){case 0:return t;case 1:return I(r)?t:T((function(t,n){return e(r,t,n)}));case 2:return I(r)&&I(n)?t:I(r)?T((function(t,r){return e(t,n,r)})):I(n)?T((function(t,n){return e(r,t,n)})):w((function(t){return e(r,n,t)}));default:return I(r)&&I(n)&&I(i)?t:I(r)&&I(n)?T((function(t,r){return e(t,r,i)})):I(r)&&I(i)?T((function(t,r){return e(t,n,r)})):I(n)&&I(i)?T((function(t,n){return e(r,t,n)})):I(r)?w((function(t){return e(t,n,i)})):I(n)?w((function(t){return e(r,t,i)})):I(i)?w((function(t){return e(r,n,t)})):e(r,n,i)}}}var q=Array.isArray||function(e){return null!=e&&e.length>=0&&"[object Array]"===Object.prototype.toString.call(e)};var P=Number.isInteger||function(e){return e<<0===e};var S=w((function(e){return null==e})),V=$((function e(t,r,n){if(0===t.length)return r;var i=t[0];if(t.length>1){var l=!S(n)&&function(e,t){return Object.prototype.hasOwnProperty.call(t,e)}(i,n)&&"object"==typeof n[i]?n[i]:P(t[1])?[]:{};r=e(Array.prototype.slice.call(t,1),r,l)}return function(e,t,r){if(P(e)&&q(r)){var n=[].concat(r);return n[e]=t,n}var i={};for(var l in r)i[l]=r[l];return i[e]=t,i}(i,r,n)}));const A=({model:a,saveButtonText:o,dense:u,onSubmit:m,initialValues:d})=>{const c=i((()=>((e,t=undefined)=>{const r={};return e.fields.forEach((e=>{if("group"===e.type){const n={};e.value.forEach((r=>{n[r.id]=j(r,t&&t[e.id])})),r[e.id]=n}else r[e.id]=j(e,t)})),r})(a,d)),[a,d]),[s,f]=l(c),p=(e,t)=>{f((r=>V(e,t,r)))};return e(n,{container:!0,component:"form",spacing:2,onSubmit:e=>{e.preventDefault(),m(s)},children:[a.fields.map((e=>t(D,{dense:u,field:e,value:s[e.id],update:!!d,onChangeValue:p},e.id))),t(n,{item:!0,xs:12,children:t(r,{type:"submit",variant:"contained",size:u?"small":"medium",children:o})})]})};export{A as ModelForm};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/model-form/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/generators/generators.model.ts","../../src/utils/theme.ts","../../src/group-value-card/group-value-card.tsx","../../src/model-form/model-form-field.tsx","../../node_modules/ramda/es/internal/_isPlaceholder.js","../../node_modules/ramda/es/internal/_curry1.js","../../node_modules/ramda/es/internal/_curry2.js","../../node_modules/ramda/es/internal/_curry3.js","../../node_modules/ramda/es/internal/_isArray.js","../../node_modules/ramda/es/internal/_isInteger.js","../../node_modules/ramda/es/isNil.js","../../node_modules/ramda/es/assocPath.js","../../node_modules/ramda/es/internal/_has.js","../../node_modules/ramda/es/internal/_assoc.js","../../src/model-form/model-form.tsx"],"sourcesContent":["/**\n * MODEL TYPES\n * Types used to specify the model\n */\nexport type ModelFieldTypes =\n | \"string\"\n | \"number\"\n | \"string[]\"\n | \"number[]\"\n | \"boolean\"\n | \"enum\"\n | \"multienum\"\n | \"date\"\n | \"time\"\n | \"datetime\";\n\ntype Base = {\n id: string;\n description: string;\n name: string;\n listable?: boolean;\n updatable?: boolean;\n required?: boolean;\n};\n\ntype Breakpoints = {\n xs?: number;\n sm?: number;\n md?: number;\n lg?: number;\n xl?: number;\n};\n\ntype StringField = {\n type: \"string\";\n};\n\ntype StringArrayField = {\n type: \"string[]\";\n};\n\ntype NumberField = {\n type: \"number\";\n};\n\ntype NumberArrayField = {\n type: \"number[]\";\n};\n\ntype BooleanField = {\n type: \"boolean\";\n};\n\ntype EnumField = {\n type: \"enum\";\n value: string[];\n};\n\ntype MultiEnumField = {\n type: \"multienum\";\n value: string[];\n};\n\ntype DateField = {\n type: \"date\";\n format: string;\n default: Date;\n};\n\ntype TimeField = {\n type: \"time\";\n format: string;\n default: Date;\n};\n\ntype DatetimeField = {\n type: \"datetime\";\n format: string;\n default: Date;\n};\n\ntype SingleFields =\n | StringField\n | NumberField\n | StringArrayField\n | NumberArrayField\n | BooleanField\n | EnumField\n | MultiEnumField\n | DateField\n | TimeField\n | DatetimeField;\n\nexport type GroupField = {\n type: \"group\";\n value: (Base & Breakpoints & SingleFields)[];\n} & Base;\n\nexport type ArrayGroupField = {\n type: \"group[]\";\n value: (Base & Breakpoints & SingleFields)[];\n} & Base;\n\ntype Fields = SingleFields | GroupField | ArrayGroupField;\nexport type ModelField = Base & Breakpoints & Fields;\n\nexport type Model = {\n fields: ModelField[];\n};\n\n/**\n * INSTANCE TYPES\n * Types used to represent an instance of a model specification\n */\nexport type BaseFieldType = string | number | boolean | Date;\nexport type ArrayFieldType = string[] | number[];\nexport type SingleFieldType = BaseFieldType | ArrayFieldType;\nexport type GroupInstanceType = { [key: string]: SingleFieldType };\nexport type ArrayInstanceType = { [key: string]: SingleFieldType }[];\nexport type FieldType = SingleFieldType | GroupInstanceType;\n\nexport interface BasicModelInstance {\n id: string;\n [key: string]: FieldType;\n}\n\n/**\n * UTILITIES\n * Some functions used in several places to help to manage models\n */\nconst InitialStateZeroValue: Record<ModelFieldTypes | \"group\" | \"group[]\", FieldType | undefined> =\n {\n string: \"\",\n number: 0,\n boolean: false,\n enum: \"\",\n multienum: [],\n date: new Date(1970, 0, 1, 0, 0),\n time: new Date(1970, 0, 1, 0, 0),\n datetime: new Date(1970, 0, 1, 0, 0),\n group: {},\n \"group[]\": [],\n \"string[]\": [],\n \"number[]\": [],\n };\n\nconst getFieldValueOrZero = (\n field: ModelField,\n values: BasicModelInstance | GroupInstanceType | undefined,\n) => {\n return (\n (values && values[field.id]) ||\n (\"default\" in field && field.default) ||\n InitialStateZeroValue[field.type]\n );\n};\n\nexport const newInstanceFromValuesOrZeroValue = <T extends BasicModelInstance>(\n model: Model,\n values: T | undefined = undefined,\n): T => {\n const obj: Record<string, FieldType | undefined> = {};\n\n model.fields.forEach((field) => {\n if (field.type === \"group\") {\n const value: GroupInstanceType = {};\n field.value.forEach((groupField) => {\n value[groupField.id] = getFieldValueOrZero(\n groupField,\n values && (values[field.id] as GroupInstanceType),\n ) as SingleFieldType;\n });\n obj[field.id] = value;\n } else {\n obj[field.id] = getFieldValueOrZero(field, values);\n }\n });\n\n return obj as T;\n};\n","import { Color, useTheme } from \"@mui/material\";\n\ntype KeyColor = keyof Color;\n\nexport const useGetDefaultThemeColor = ({\n lightWeight = 100,\n darkWeight = 900,\n}: { lightWeight?: KeyColor; darkWeight?: KeyColor } = {}) => {\n const { palette } = useTheme();\n return palette.mode === \"light\" ? palette.grey[lightWeight] : palette.grey[darkWeight];\n};\n","import { Grid, Paper, Box, Typography, useTheme } from \"@mui/material\";\nimport React from \"react\";\nimport { useGetDefaultThemeColor } from \"../utils/theme\";\nimport { ValueItemElement } from \"../value-item/value-item\";\n\nexport interface GroupValueCardProps {\n title: string;\n subtitle?: string;\n centered?: boolean;\n children: ValueItemElement | ValueItemElement[];\n dense?: boolean;\n}\n\nexport const GroupValueCard = ({\n title,\n subtitle,\n centered,\n children,\n dense,\n}: GroupValueCardProps) => {\n const { typography } = useTheme();\n const defaultColor = useGetDefaultThemeColor({ lightWeight: 200, darkWeight: 800 });\n\n return (\n <Paper\n sx={{\n paddingBottom: dense ? 0 : 1,\n }}\n >\n <Box\n bgcolor={defaultColor}\n px={dense ? 1 : 2}\n py={dense ? 0.5 : 1}\n lineHeight={dense ? 0 : undefined}\n >\n <Typography variant={dense ? \"body1\" : \"h6\"} role=\"heading\" aria-level={1}>\n {title}\n </Typography>\n {subtitle && (\n <Typography\n variant={dense ? \"caption\" : \"body2\"}\n role=\"heading\"\n aria-level={2}\n lineHeight={dense ? typography.pxToRem(15) : undefined}\n >\n {subtitle}\n </Typography>\n )}\n </Box>\n <Grid\n container\n padding={1}\n rowSpacing={dense ? 1 : 2}\n justifyContent={centered ? \"center\" : \"flex-start\"}\n >\n {children}\n </Grid>\n </Paper>\n );\n};\n","import {\n Box,\n Grid,\n FormControlLabel,\n Checkbox,\n FormControl,\n InputLabel,\n Select,\n MenuItem,\n ListItemText,\n TextField,\n SelectChangeEvent,\n} from \"@mui/material\";\nimport { DesktopDatePicker, TimePicker, DateTimePicker } from \"@mui/x-date-pickers\";\nimport React, { ChangeEvent, ReactElement } from \"react\";\nimport { useGetDefaultThemeColor } from \"~/utils\";\nimport { GroupValueCard } from \"~/group-value-card\";\nimport {\n ArrayFieldType,\n FieldType,\n ModelField,\n ModelFieldTypes,\n} from \"~/generators/generators.model\";\n\nexport interface ModelFormField {\n field: ModelField;\n update: boolean;\n dense?: boolean;\n path?: string[];\n value: any;\n onChangeValue: (path: string[], value: any) => void;\n}\n\nexport const ModelFormField = ({\n field,\n path = [],\n value,\n dense,\n update,\n onChangeValue,\n}: ModelFormField) => {\n const handleCheckboxChange = (e: ChangeEvent<HTMLInputElement>) => {\n e.preventDefault();\n onChangeValue([...path, e.target.name], e.target.checked);\n };\n\n const handleSelectChange = (e: SelectChangeEvent<FieldType>) => {\n e.preventDefault();\n onChangeValue([...path, e.target.name], e.target.value);\n };\n\n const handleMultiSelectChange = (e: SelectChangeEvent<FieldType>) => {\n e.preventDefault();\n const { value } = e.target;\n const newValue = typeof value === \"string\" ? value.split(\",\") : value;\n onChangeValue([...path, e.target.name], newValue);\n };\n\n const handleInputChange = (\n e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>,\n type: ModelFieldTypes,\n ) => {\n e.preventDefault();\n\n let value: string | number | string[] | number[] = e.target.value;\n if (type === \"number\" && typeof value === \"string\") {\n value = parseInt(e.target.value, 10);\n } else if (type.includes(\"[]\")) {\n value = e.target.value.split(\",\");\n }\n onChangeValue([...path, e.target.name], value);\n };\n\n const handleDateChange = (value: FieldType | null, id: string) => {\n onChangeValue([...path, id], value);\n };\n\n const defaultColor = useGetDefaultThemeColor({ lightWeight: 200, darkWeight: 800 });\n\n const {\n id,\n type,\n name,\n description,\n updatable = true,\n required = true,\n xs,\n sm,\n md,\n lg,\n xl,\n } = field;\n const disabled: boolean = !updatable && update;\n\n let fieldInput: ReactElement;\n const size = dense ? \"small\" : \"medium\";\n if (type === \"group\") {\n fieldInput = (\n <GroupValueCard title={name} subtitle={description} dense={dense}>\n <Grid container spacing={2} sx={{ p: 2 }}>\n {field.value.map((f) => (\n <ModelFormField\n key={f.id}\n field={f}\n dense={dense}\n path={[...path, id]}\n value={value[f.id]}\n update={update}\n onChangeValue={onChangeValue}\n />\n ))}\n </Grid>\n </GroupValueCard>\n );\n } else if (type === \"boolean\") {\n fieldInput = (\n <Box sx={{ height: 1, display: \"flex\", alignItems: \"center\" }}>\n <FormControlLabel\n control={\n <Checkbox\n name={id}\n size={size}\n onChange={handleCheckboxChange}\n checked={value as boolean}\n disabled={disabled}\n />\n }\n label={name}\n />\n </Box>\n );\n } else if (type === \"enum\") {\n fieldInput = (\n <FormControl fullWidth>\n <InputLabel id={`${id}-select-label`}>{name}</InputLabel>\n <Select\n labelId={`${id}-select-label`}\n id={`${id}-select`}\n value={value}\n label={name}\n name={id}\n size={size}\n onChange={handleSelectChange}\n required={required}\n disabled={disabled}\n >\n {field.value.map((fieldValue) => (\n <MenuItem key={fieldValue} value={fieldValue}>\n {fieldValue}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n );\n } else if (type === \"multienum\") {\n fieldInput = (\n <FormControl fullWidth>\n <InputLabel id={`${id}-select-label`}>{name}</InputLabel>\n <Select\n labelId={`${id}-select-label`}\n id={`${id}-select`}\n value={value || []}\n renderValue={(selected) => (selected as ArrayFieldType).join(\", \")}\n label={name}\n name={id}\n size={size}\n onChange={handleMultiSelectChange}\n required={required}\n disabled={disabled}\n multiple\n >\n {field.value.map((fieldValue) => (\n <MenuItem key={fieldValue} value={fieldValue}>\n <Checkbox checked={((value as any[]) || []).includes(fieldValue)} />\n <ListItemText primary={fieldValue} />\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n );\n } else if (type === \"date\") {\n fieldInput = (\n <DesktopDatePicker\n label={name}\n format={field.format}\n value={value}\n slotProps={\n {\n field: {\n size,\n },\n } as any\n }\n disabled={disabled}\n onChange={(value) => handleDateChange(value, id)}\n />\n );\n } else if (type === \"time\") {\n fieldInput = (\n <TimePicker\n label={name}\n format={field.format}\n value={value}\n slotProps={\n {\n field: {\n size,\n },\n } as any\n }\n disabled={disabled}\n onChange={(value) => handleDateChange(value, id)}\n />\n );\n } else if (type === \"datetime\") {\n fieldInput = (\n <DateTimePicker\n label={name}\n format={field.format}\n value={value}\n slotProps={\n {\n field: {\n size,\n },\n } as any\n }\n disabled={disabled}\n onChange={(value) => handleDateChange(value, id)}\n />\n );\n } else if (type === \"group[]\") {\n return null;\n } else if (type.includes(\"[]\")) {\n fieldInput = (\n <TextField\n required={required}\n type=\"text\"\n label={name}\n name={id}\n size={size}\n variant=\"outlined\"\n helperText=\"Use comas to separate multiple values\"\n fullWidth\n disabled={disabled}\n value={(value as any[]).join(\",\")}\n onChange={(e) => handleInputChange(e, type)}\n />\n );\n } else {\n fieldInput = (\n <TextField\n required={required}\n type={type}\n label={name}\n size={size}\n name={id}\n variant=\"outlined\"\n fullWidth\n value={value}\n disabled={disabled}\n onChange={(e) => handleInputChange(e, type)}\n />\n );\n }\n\n return (\n <Grid item key={id} xs={xs} sm={sm} md={md} lg={lg} xl={xl}>\n {fieldInput}\n </Grid>\n );\n};\n","export default function _isPlaceholder(a) {\n return a != null && typeof a === 'object' && a['@@functional/placeholder'] === true;\n}","import _isPlaceholder from \"./_isPlaceholder.js\";\n/**\n * Optimized internal one-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\nexport default function _curry1(fn) {\n return function f1(a) {\n if (arguments.length === 0 || _isPlaceholder(a)) {\n return f1;\n } else {\n return fn.apply(this, arguments);\n }\n };\n}","import _curry1 from \"./_curry1.js\";\nimport _isPlaceholder from \"./_isPlaceholder.js\";\n/**\n * Optimized internal two-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\nexport default function _curry2(fn) {\n return function f2(a, b) {\n switch (arguments.length) {\n case 0:\n return f2;\n\n case 1:\n return _isPlaceholder(a) ? f2 : _curry1(function (_b) {\n return fn(a, _b);\n });\n\n default:\n return _isPlaceholder(a) && _isPlaceholder(b) ? f2 : _isPlaceholder(a) ? _curry1(function (_a) {\n return fn(_a, b);\n }) : _isPlaceholder(b) ? _curry1(function (_b) {\n return fn(a, _b);\n }) : fn(a, b);\n }\n };\n}","import _curry1 from \"./_curry1.js\";\nimport _curry2 from \"./_curry2.js\";\nimport _isPlaceholder from \"./_isPlaceholder.js\";\n/**\n * Optimized internal three-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\nexport default function _curry3(fn) {\n return function f3(a, b, c) {\n switch (arguments.length) {\n case 0:\n return f3;\n\n case 1:\n return _isPlaceholder(a) ? f3 : _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n });\n\n case 2:\n return _isPlaceholder(a) && _isPlaceholder(b) ? f3 : _isPlaceholder(a) ? _curry2(function (_a, _c) {\n return fn(_a, b, _c);\n }) : _isPlaceholder(b) ? _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n }) : _curry1(function (_c) {\n return fn(a, b, _c);\n });\n\n default:\n return _isPlaceholder(a) && _isPlaceholder(b) && _isPlaceholder(c) ? f3 : _isPlaceholder(a) && _isPlaceholder(b) ? _curry2(function (_a, _b) {\n return fn(_a, _b, c);\n }) : _isPlaceholder(a) && _isPlaceholder(c) ? _curry2(function (_a, _c) {\n return fn(_a, b, _c);\n }) : _isPlaceholder(b) && _isPlaceholder(c) ? _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n }) : _isPlaceholder(a) ? _curry1(function (_a) {\n return fn(_a, b, c);\n }) : _isPlaceholder(b) ? _curry1(function (_b) {\n return fn(a, _b, c);\n }) : _isPlaceholder(c) ? _curry1(function (_c) {\n return fn(a, b, _c);\n }) : fn(a, b, c);\n }\n };\n}","/**\n * Tests whether or not an object is an array.\n *\n * @private\n * @param {*} val The object to test.\n * @return {Boolean} `true` if `val` is an array, `false` otherwise.\n * @example\n *\n * _isArray([]); //=> true\n * _isArray(null); //=> false\n * _isArray({}); //=> false\n */\nexport default Array.isArray || function _isArray(val) {\n return val != null && val.length >= 0 && Object.prototype.toString.call(val) === '[object Array]';\n};","/**\n * Determine if the passed argument is an integer.\n *\n * @private\n * @param {*} n\n * @category Type\n * @return {Boolean}\n */\nexport default Number.isInteger || function _isInteger(n) {\n return n << 0 === n;\n};","import _curry1 from \"./internal/_curry1.js\";\n/**\n * Checks if the input value is `null` or `undefined`.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Type\n * @sig * -> Boolean\n * @param {*} x The value to test.\n * @return {Boolean} `true` if `x` is `undefined` or `null`, otherwise `false`.\n * @example\n *\n * R.isNil(null); //=> true\n * R.isNil(undefined); //=> true\n * R.isNil(0); //=> false\n * R.isNil([]); //=> false\n */\n\nvar isNil =\n/*#__PURE__*/\n_curry1(function isNil(x) {\n return x == null;\n});\n\nexport default isNil;","import _curry3 from \"./internal/_curry3.js\";\nimport _has from \"./internal/_has.js\";\nimport _isInteger from \"./internal/_isInteger.js\";\nimport _assoc from \"./internal/_assoc.js\";\nimport isNil from \"./isNil.js\";\n/**\n * Makes a shallow clone of an object, setting or overriding the nodes required\n * to create the given path, and placing the specific value at the tail end of\n * that path. Note that this copies and flattens prototype properties onto the\n * new object as well. All non-primitive properties are copied by reference.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Object\n * @typedefn Idx = String | Int | Symbol\n * @sig [Idx] -> a -> {a} -> {a}\n * @param {Array} path the path to set\n * @param {*} val The new value\n * @param {Object} obj The object to clone\n * @return {Object} A new object equivalent to the original except along the specified path.\n * @see R.dissocPath\n * @example\n *\n * R.assocPath(['a', 'b', 'c'], 42, {a: {b: {c: 0}}}); //=> {a: {b: {c: 42}}}\n *\n * // Any missing or non-object keys in path will be overridden\n * R.assocPath(['a', 'b', 'c'], 42, {a: 5}); //=> {a: {b: {c: 42}}}\n */\n\nvar assocPath =\n/*#__PURE__*/\n_curry3(function assocPath(path, val, obj) {\n if (path.length === 0) {\n return val;\n }\n\n var idx = path[0];\n\n if (path.length > 1) {\n var nextObj = !isNil(obj) && _has(idx, obj) && typeof obj[idx] === 'object' ? obj[idx] : _isInteger(path[1]) ? [] : {};\n val = assocPath(Array.prototype.slice.call(path, 1), val, nextObj);\n }\n\n return _assoc(idx, val, obj);\n});\n\nexport default assocPath;","export default function _has(prop, obj) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}","import _isArray from \"./_isArray.js\";\nimport _isInteger from \"./_isInteger.js\";\n/**\n * Makes a shallow clone of an object, setting or overriding the specified\n * property with the given value. Note that this copies and flattens prototype\n * properties onto the new object as well. All non-primitive properties are\n * copied by reference.\n *\n * @private\n * @param {String|Number} prop The property name to set\n * @param {*} val The new value\n * @param {Object|Array} obj The object to clone\n * @return {Object|Array} A new object equivalent to the original except for the changed property.\n */\n\nexport default function _assoc(prop, val, obj) {\n if (_isInteger(prop) && _isArray(obj)) {\n var arr = [].concat(obj);\n arr[prop] = val;\n return arr;\n }\n\n var result = {};\n\n for (var p in obj) {\n result[p] = obj[p];\n }\n\n result[prop] = val;\n return result;\n}","import { Button, Grid } from \"@mui/material\";\nimport React, { FormEvent, useMemo } from \"react\";\nimport { useState } from \"react\";\nimport {\n Model,\n BasicModelInstance,\n FieldType,\n newInstanceFromValuesOrZeroValue,\n} from \"../generators/generators.model\";\nimport { ModelFormField } from \"./model-form-field\";\nimport { assocPath } from \"ramda\";\n\nexport interface ModelFormProps<T extends BasicModelInstance> {\n model: Model;\n dense?: boolean;\n initialValues?: T;\n saveButtonText: string;\n onSubmit: (values: T) => void;\n}\n\nexport const ModelForm = <T extends BasicModelInstance>({\n model,\n saveButtonText,\n dense,\n onSubmit,\n initialValues,\n}: ModelFormProps<T>) => {\n const valuesInitialState = useMemo(\n () => newInstanceFromValuesOrZeroValue<T>(model, initialValues),\n [model, initialValues],\n );\n const [values, setValues] = useState<T>(valuesInitialState);\n\n const setKeyValue = (path: string[], value: FieldType | null) => {\n setValues((v) => assocPath(path, value, v));\n };\n\n const handleSubmit = (e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n onSubmit(values);\n };\n\n return (\n <Grid container component=\"form\" spacing={2} onSubmit={handleSubmit}>\n {model.fields.map((f) => (\n <ModelFormField\n key={f.id}\n dense={dense}\n field={f}\n value={values[f.id]}\n update={!!initialValues}\n onChangeValue={setKeyValue}\n />\n ))}\n <Grid item xs={12}>\n <Button type=\"submit\" variant=\"contained\" size={dense ? \"small\" : \"medium\"}>\n {saveButtonText}\n </Button>\n </Grid>\n </Grid>\n );\n};\n"],"names":["InitialStateZeroValue","string","number","boolean","enum","multienum","date","Date","time","datetime","group","getFieldValueOrZero","field","values","id","default","type","useGetDefaultThemeColor","lightWeight","darkWeight","palette","useTheme","mode","grey","GroupValueCard","title","subtitle","centered","children","dense","typography","defaultColor","React","createElement","Paper","sx","paddingBottom","Box","bgcolor","px","py","lineHeight","undefined","Typography","variant","role","pxToRem","Grid","container","padding","rowSpacing","justifyContent","ModelFormField","path","value","update","onChangeValue","handleCheckboxChange","e","preventDefault","target","name","checked","handleSelectChange","handleMultiSelectChange","newValue","split","handleInputChange","parseInt","includes","handleDateChange","description","updatable","required","xs","sm","md","lg","xl","disabled","fieldInput","size","spacing","p","map","f","key","height","display","alignItems","FormControlLabel","control","Checkbox","onChange","label","FormControl","fullWidth","InputLabel","Select","labelId","fieldValue","MenuItem","renderValue","selected","join","multiple","ListItemText","primary","DesktopDatePicker","format","slotProps","TimePicker","DateTimePicker","TextField","helperText","item","_isPlaceholder","a","_curry1","fn","f1","arguments","length","apply","this","_curry2","f2","b","_b","_a","_curry3","f3","c","_c","_isArray","Array","isArray","val","Object","prototype","toString","call","_isInteger","Number","isInteger","n","isNil","x","assocPath","obj","idx","nextObj","prop","hasOwnProperty","_has","slice","arr","concat","result","_assoc","ModelForm","model","saveButtonText","onSubmit","initialValues","valuesInitialState","useMemo","fields","forEach","groupField","newInstanceFromValuesOrZeroValue","setValues","useState","setKeyValue","v","component","Button"],"mappings":"gXAkIA,MAAMA,EACJ,CACEC,OAAQ,GACRC,OAAQ,EACRC,SAAS,EACTC,KAAM,GACNC,UAAW,GACXC,KAAM,IAAIC,KAAK,KAAM,EAAG,EAAG,EAAG,GAC9BC,KAAM,IAAID,KAAK,KAAM,EAAG,EAAG,EAAG,GAC9BE,SAAU,IAAIF,KAAK,KAAM,EAAG,EAAG,EAAG,GAClCG,MAAO,CAAE,EACT,UAAW,GACX,WAAY,GACZ,WAAY,IAGVC,EAAsB,CAC1BC,EACAC,IAGGA,GAAUA,EAAOD,EAAME,KACvB,YAAaF,GAASA,EAAMG,SAC7Bf,EAAsBY,EAAMI,MCrJnBC,EAA0B,EACrCC,cAAc,IACdC,aAAa,KACwC,MACrD,MAAMC,QAAEA,GAAYC,IACpB,MAAwB,UAAjBD,EAAQE,KAAmBF,EAAQG,KAAKL,GAAeE,EAAQG,KAAKJ,EAAW,ECI3EK,EAAiB,EAC5BC,QACAC,WACAC,WACAC,WACAC,YAEA,MAAMC,WAAEA,GAAeT,IACjBU,EAAed,EAAwB,CAAEC,YAAa,IAAKC,WAAY,MAE7E,OACEa,EAAAC,cAACC,EAAK,CACJC,GAAI,CACFC,cAAeP,EAAQ,EAAI,IAG7BG,EAAAC,cAACI,EACC,CAAAC,QAASP,EACTQ,GAAIV,EAAQ,EAAI,EAChBW,GAAIX,EAAQ,GAAM,EAClBY,WAAYZ,EAAQ,OAAIa,GAExBV,EAACC,cAAAU,GAAWC,QAASf,EAAQ,QAAU,KAAMgB,KAAK,UAAsB,aAAA,GACrEpB,GAEFC,GACCM,EAAAC,cAACU,EACC,CAAAC,QAASf,EAAQ,UAAY,QAC7BgB,KAAK,UAAS,aACF,EACZJ,WAAYZ,EAAQC,EAAWgB,QAAQ,SAAMJ,GAE5ChB,IAIPM,EAAAC,cAACc,EACC,CAAAC,WACA,EAAAC,QAAS,EACTC,WAAYrB,EAAQ,EAAI,EACxBsB,eAAgBxB,EAAW,SAAW,cAErCC,GAGL,ECzBSwB,EAAiB,EAC5BxC,QACAyC,OAAO,GACPC,QACAzB,QACA0B,SACAC,oBAEA,MAAMC,EAAwBC,IAC5BA,EAAEC,iBACFH,EAAc,IAAIH,EAAMK,EAAEE,OAAOC,MAAOH,EAAEE,OAAOE,QAAQ,EAGrDC,EAAsBL,IAC1BA,EAAEC,iBACFH,EAAc,IAAIH,EAAMK,EAAEE,OAAOC,MAAOH,EAAEE,OAAON,MAAM,EAGnDU,EAA2BN,IAC/BA,EAAEC,iBACF,MAAML,MAAEA,GAAUI,EAAEE,OACdK,EAA4B,iBAAVX,EAAqBA,EAAMY,MAAM,KAAOZ,EAChEE,EAAc,IAAIH,EAAMK,EAAEE,OAAOC,MAAOI,EAAS,EAG7CE,EAAoB,CACxBT,EACA1C,KAEA0C,EAAEC,iBAEF,IAAIL,EAA+CI,EAAEE,OAAON,MAC/C,WAATtC,GAAsC,iBAAVsC,EAC9BA,EAAQc,SAASV,EAAEE,OAAON,MAAO,IACxBtC,EAAKqD,SAAS,QACvBf,EAAQI,EAAEE,OAAON,MAAMY,MAAM,MAE/BV,EAAc,IAAIH,EAAMK,EAAEE,OAAOC,MAAOP,EAAM,EAG1CgB,EAAmB,CAAChB,EAAyBxC,KACjD0C,EAAc,IAAIH,EAAMvC,GAAKwC,EAAM,EAGhBrC,EAAwB,CAAEC,YAAa,IAAKC,WAAY,MAE7E,MAAML,GACJA,EAAEE,KACFA,EAAI6C,KACJA,EAAIU,YACJA,EAAWC,UACXA,GAAY,EAAIC,SAChBA,GAAW,EAAIC,GACfA,EAAEC,GACFA,EAAEC,GACFA,EAAEC,GACFA,EAAEC,GACFA,GACElE,EACEmE,GAAqBP,GAAajB,EAExC,IAAIyB,EACJ,MAAMC,EAAOpD,EAAQ,QAAU,SAC/B,GAAa,UAATb,EACFgE,EACEhD,EAACC,cAAAT,GAAeC,MAAOoC,EAAMnC,SAAU6C,EAAa1C,MAAOA,GACzDG,EAAAC,cAACc,EAAK,CAAAC,WAAU,EAAAkC,QAAS,EAAG/C,GAAI,CAAEgD,EAAG,IAClCvE,EAAM0C,MAAM8B,KAAKC,GAChBrD,EAACC,cAAAmB,GACCkC,IAAKD,EAAEvE,GACPF,MAAOyE,EACPxD,MAAOA,EACPwB,KAAM,IAAIA,EAAMvC,GAChBwC,MAAOA,EAAM+B,EAAEvE,IACfyC,OAAQA,EACRC,cAAeA,aAMpB,GAAa,YAATxC,EACTgE,EACEhD,EAAAC,cAACI,EAAI,CAAAF,GAAI,CAAEoD,OAAQ,EAAGC,QAAS,OAAQC,WAAY,WACjDzD,EAAAC,cAACyD,EAAgB,CACfC,QACE3D,gBAAC4D,EAAQ,CACP/B,KAAM/C,EACNmE,KAAMA,EACNY,SAAUpC,EACVK,QAASR,EACTyB,SAAUA,IAGde,MAAOjC,UAIR,GAAa,SAAT7C,EACTgE,EACEhD,EAACC,cAAA8D,GAAYC,WAAS,GACpBhE,EAACC,cAAAgE,GAAWnF,GAAI,GAAGA,kBAAoB+C,GACvC7B,EAAAC,cAACiE,EAAM,CACLC,QAAS,GAAGrF,iBACZA,GAAI,GAAGA,WACPwC,MAAOA,EACPwC,MAAOjC,EACPA,KAAM/C,EACNmE,KAAMA,EACNY,SAAU9B,EACVU,SAAUA,EACVM,SAAUA,GAETnE,EAAM0C,MAAM8B,KAAKgB,GAChBpE,EAAAC,cAACoE,EAAQ,CAACf,IAAKc,EAAY9C,MAAO8C,GAC/BA,YAMN,GAAa,cAATpF,EACTgE,EACEhD,EAACC,cAAA8D,GAAYC,WAAS,GACpBhE,EAACC,cAAAgE,GAAWnF,GAAI,GAAGA,kBAAoB+C,GACvC7B,EAAAC,cAACiE,EACC,CAAAC,QAAS,GAAGrF,iBACZA,GAAI,GAAGA,WACPwC,MAAOA,GAAS,GAChBgD,YAAcC,GAAcA,EAA4BC,KAAK,MAC7DV,MAAOjC,EACPA,KAAM/C,EACNmE,KAAMA,EACNY,SAAU7B,EACVS,SAAUA,EACVM,SAAUA,EACV0B,UAEC,GAAA7F,EAAM0C,MAAM8B,KAAKgB,GAChBpE,EAACC,cAAAoE,GAASf,IAAKc,EAAY9C,MAAO8C,GAChCpE,EAAAC,cAAC2D,EAAQ,CAAC9B,SAAWR,GAAmB,IAAIe,SAAS+B,KACrDpE,EAAAC,cAACyE,EAAY,CAACC,QAASP,cAM5B,GAAa,SAATpF,EACTgE,EACEhD,EAACC,cAAA2E,GACCd,MAAOjC,EACPgD,OAAQjG,EAAMiG,OACdvD,MAAOA,EACPwD,UACE,CACElG,MAAO,CACLqE,SAINF,SAAUA,EACVc,SAAWvC,GAAUgB,EAAiBhB,EAAOxC,UAG5C,GAAa,SAATE,EACTgE,EACEhD,EAACC,cAAA8E,GACCjB,MAAOjC,EACPgD,OAAQjG,EAAMiG,OACdvD,MAAOA,EACPwD,UACE,CACElG,MAAO,CACLqE,SAINF,SAAUA,EACVc,SAAWvC,GAAUgB,EAAiBhB,EAAOxC,UAG5C,GAAa,aAATE,EACTgE,EACEhD,EAACC,cAAA+E,GACClB,MAAOjC,EACPgD,OAAQjG,EAAMiG,OACdvD,MAAOA,EACPwD,UACE,CACElG,MAAO,CACLqE,SAINF,SAAUA,EACVc,SAAWvC,GAAUgB,EAAiBhB,EAAOxC,SAG5C,IAAa,YAATE,EACT,OAAO,KAEPgE,EADShE,EAAKqD,SAAS,MAErBrC,EAACC,cAAAgF,EACC,CAAAxC,SAAUA,EACVzD,KAAK,OACL8E,MAAOjC,EACPA,KAAM/C,EACNmE,KAAMA,EACNrC,QAAQ,WACRsE,WAAW,wCACXlB,WAAS,EACTjB,SAAUA,EACVzB,MAAQA,EAAgBkD,KAAK,KAC7BX,SAAWnC,GAAMS,EAAkBT,EAAG1C,KAKxCgB,EAAAC,cAACgF,EAAS,CACRxC,SAAUA,EACVzD,KAAMA,EACN8E,MAAOjC,EACPoB,KAAMA,EACNpB,KAAM/C,EACN8B,QAAQ,WACRoD,WACA,EAAA1C,MAAOA,EACPyB,SAAUA,EACVc,SAAWnC,GAAMS,EAAkBT,EAAG1C,IAG3C,CAED,OACEgB,EAAAC,cAACc,EAAI,CAACoE,MAAK,EAAA7B,IAAKxE,EAAI4D,GAAIA,EAAIC,GAAIA,EAAIC,GAAIA,EAAIC,GAAIA,EAAIC,GAAIA,GACrDE,EAEH,EC9QW,SAASoC,EAAeC,GACrC,OAAY,MAALA,GAA0B,iBAANA,IAAoD,IAAlCA,EAAE,2BACjD,CCQe,SAASC,EAAQC,GAC9B,OAAO,SAASC,EAAGH,GACjB,OAAyB,IAArBI,UAAUC,QAAgBN,EAAeC,GACpCG,EAEAD,EAAGI,MAAMC,KAAMH,UAE5B,CACA,CCPe,SAASI,EAAQN,GAC9B,OAAO,SAASO,EAAGT,EAAGU,GACpB,OAAQN,UAAUC,QAChB,KAAK,EACH,OAAOI,EAET,KAAK,EACH,OAAOV,EAAeC,GAAKS,EAAKR,GAAQ,SAAUU,GAChD,OAAOT,EAAGF,EAAGW,EACvB,IAEM,QACE,OAAOZ,EAAeC,IAAMD,EAAeW,GAAKD,EAAKV,EAAeC,GAAKC,GAAQ,SAAUW,GACzF,OAAOV,EAAGU,EAAIF,EACf,IAAIX,EAAeW,GAAKT,GAAQ,SAAUU,GACzC,OAAOT,EAAGF,EAAGW,EACd,IAAIT,EAAGF,EAAGU,GAEnB,CACA,CClBe,SAASG,EAAQX,GAC9B,OAAO,SAASY,EAAGd,EAAGU,EAAGK,GACvB,OAAQX,UAAUC,QAChB,KAAK,EACH,OAAOS,EAET,KAAK,EACH,OAAOf,EAAeC,GAAKc,EAAKN,GAAQ,SAAUG,EAAIK,GACpD,OAAOd,EAAGF,EAAGW,EAAIK,EAC3B,IAEM,KAAK,EACH,OAAOjB,EAAeC,IAAMD,EAAeW,GAAKI,EAAKf,EAAeC,GAAKQ,GAAQ,SAAUI,EAAII,GAC7F,OAAOd,EAAGU,EAAIF,EAAGM,EAC3B,IAAajB,EAAeW,GAAKF,GAAQ,SAAUG,EAAIK,GAC7C,OAAOd,EAAGF,EAAGW,EAAIK,EAC3B,IAAaf,GAAQ,SAAUe,GACrB,OAAOd,EAAGF,EAAGU,EAAGM,EAC1B,IAEM,QACE,OAAOjB,EAAeC,IAAMD,EAAeW,IAAMX,EAAegB,GAAKD,EAAKf,EAAeC,IAAMD,EAAeW,GAAKF,GAAQ,SAAUI,EAAID,GACvI,OAAOT,EAAGU,EAAID,EAAII,EAC5B,IAAahB,EAAeC,IAAMD,EAAegB,GAAKP,GAAQ,SAAUI,EAAII,GAClE,OAAOd,EAAGU,EAAIF,EAAGM,EAC3B,IAAajB,EAAeW,IAAMX,EAAegB,GAAKP,GAAQ,SAAUG,EAAIK,GAClE,OAAOd,EAAGF,EAAGW,EAAIK,EAClB,IAAIjB,EAAeC,GAAKC,GAAQ,SAAUW,GACzC,OAAOV,EAAGU,EAAIF,EAAGK,EAClB,IAAIhB,EAAeW,GAAKT,GAAQ,SAAUU,GACzC,OAAOT,EAAGF,EAAGW,EAAII,EAClB,IAAIhB,EAAegB,GAAKd,GAAQ,SAAUe,GACzC,OAAOd,EAAGF,EAAGU,EAAGM,EACjB,IAAId,EAAGF,EAAGU,EAAGK,GAEtB,CACA,CCpCA,IAAeE,EAAAC,MAAMC,SAAW,SAAkBC,GAChD,OAAc,MAAPA,GAAeA,EAAIf,QAAU,GAA6C,mBAAxCgB,OAAOC,UAAUC,SAASC,KAAKJ,EAC1E,ECNA,IAAeK,EAAAC,OAAOC,WAAa,SAAoBC,GACrD,OAAOA,GAAK,IAAMA,CACpB,ECSA,IAAIC,EAEJ5B,GAAQ,SAAe6B,GACrB,OAAY,MAALA,CACT,ICOIC,EAEJlB,GAAQ,SAASkB,EAAU/F,EAAMoF,EAAKY,GACpC,GAAoB,IAAhBhG,EAAKqE,OACP,OAAOe,EAGT,IAAIa,EAAMjG,EAAK,GAEf,GAAIA,EAAKqE,OAAS,EAAG,CACnB,IAAI6B,GAAWL,EAAMG,ICxCV,SAAcG,EAAMH,GACjC,OAAOX,OAAOC,UAAUc,eAAeZ,KAAKQ,EAAKG,EACnD,CDsCiCE,CAAKJ,EAAKD,IAA4B,iBAAbA,EAAIC,GAAoBD,EAAIC,GAAOR,EAAWzF,EAAK,IAAM,GAAK,GACpHoF,EAAMW,EAAUb,MAAMI,UAAUgB,MAAMd,KAAKxF,EAAM,GAAIoF,EAAKc,EAC3D,CAED,OE7Ba,SAAgBC,EAAMf,EAAKY,GACxC,GAAIP,EAAWU,IAASlB,EAASe,GAAM,CACrC,IAAIO,EAAM,GAAGC,OAAOR,GAEpB,OADAO,EAAIJ,GAAQf,EACLmB,CACR,CAED,IAAIE,EAAS,CAAA,EAEb,IAAK,IAAI3E,KAAKkE,EACZS,EAAO3E,GAAKkE,EAAIlE,GAIlB,OADA2E,EAAON,GAAQf,EACRqB,CACT,CFcSC,CAAOT,EAAKb,EAAKY,EAC1B,IGzBa,MAAAW,EAAY,EACvBC,QACAC,iBACArI,QACAsI,WACAC,oBAEA,MAAMC,EAAqBC,GACzB,IdiI4C,EAC9CL,EACApJ,EAAwB6B,aAExB,MAAM2G,EAA6C,CAAA,EAiBnD,OAfAY,EAAMM,OAAOC,SAAS5J,IACpB,GAAmB,UAAfA,EAAMI,KAAkB,CAC1B,MAAMsC,EAA2B,CAAA,EACjC1C,EAAM0C,MAAMkH,SAASC,IACnBnH,EAAMmH,EAAW3J,IAAMH,EACrB8J,EACA5J,GAAWA,EAAOD,EAAME,IACN,IAEtBuI,EAAIzI,EAAME,IAAMwC,CACjB,MACC+F,EAAIzI,EAAME,IAAMH,EAAoBC,EAAOC,EAC5C,IAGIwI,CAAQ,EctJPqB,CAAoCT,EAAOG,IACjD,CAACH,EAAOG,KAEHvJ,EAAQ8J,GAAaC,EAAYP,GAElCQ,EAAc,CAACxH,EAAgBC,KACnCqH,GAAWG,GAAM1B,EAAU/F,EAAMC,EAAOwH,IAAG,EAQ7C,OACE9I,EAACC,cAAAc,EAAK,CAAAC,aAAU+H,UAAU,OAAO7F,QAAS,EAAGiF,SANzBzG,IACpBA,EAAEC,iBACFwG,EAAStJ,EAAO,GAKboJ,EAAMM,OAAOnF,KAAKC,GACjBrD,gBAACoB,EAAc,CACbkC,IAAKD,EAAEvE,GACPe,MAAOA,EACPjB,MAAOyE,EACP/B,MAAOzC,EAAOwE,EAAEvE,IAChByC,SAAU6G,EACV5G,cAAeqH,MAGnB7I,EAAAC,cAACc,EAAK,CAAAoE,MAAK,EAAAzC,GAAI,IACb1C,EAACC,cAAA+I,EAAO,CAAAhK,KAAK,SAAS4B,QAAQ,YAAYqC,KAAMpD,EAAQ,QAAU,UAC/DqI,IAIP"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/generators/generators.model.ts","../../src/utils/theme.ts","../../src/group-value-card/group-value-card.tsx","../../src/model-form/model-form-field.tsx","../../node_modules/ramda/es/internal/_isPlaceholder.js","../../node_modules/ramda/es/internal/_curry1.js","../../node_modules/ramda/es/internal/_curry2.js","../../node_modules/ramda/es/internal/_curry3.js","../../node_modules/ramda/es/internal/_isArray.js","../../node_modules/ramda/es/internal/_isInteger.js","../../node_modules/ramda/es/isNil.js","../../node_modules/ramda/es/assocPath.js","../../node_modules/ramda/es/internal/_has.js","../../node_modules/ramda/es/internal/_assoc.js","../../src/model-form/model-form.tsx"],"sourcesContent":["/**\n * MODEL TYPES\n * Types used to specify the model\n */\nexport type ModelFieldTypes =\n | \"string\"\n | \"number\"\n | \"string[]\"\n | \"number[]\"\n | \"boolean\"\n | \"enum\"\n | \"multienum\"\n | \"date\"\n | \"time\"\n | \"datetime\";\n\ntype Base = {\n id: string;\n description: string;\n name: string;\n listable?: boolean;\n updatable?: boolean;\n required?: boolean;\n};\n\ntype Breakpoints = {\n xs?: number;\n sm?: number;\n md?: number;\n lg?: number;\n xl?: number;\n};\n\ntype StringField = {\n type: \"string\";\n};\n\ntype StringArrayField = {\n type: \"string[]\";\n};\n\ntype NumberField = {\n type: \"number\";\n};\n\ntype NumberArrayField = {\n type: \"number[]\";\n};\n\ntype BooleanField = {\n type: \"boolean\";\n};\n\ntype EnumField = {\n type: \"enum\";\n value: string[];\n};\n\ntype MultiEnumField = {\n type: \"multienum\";\n value: string[];\n};\n\ntype DateField = {\n type: \"date\";\n format: string;\n default: Date;\n};\n\ntype TimeField = {\n type: \"time\";\n format: string;\n default: Date;\n};\n\ntype DatetimeField = {\n type: \"datetime\";\n format: string;\n default: Date;\n};\n\ntype SingleFields =\n | StringField\n | NumberField\n | StringArrayField\n | NumberArrayField\n | BooleanField\n | EnumField\n | MultiEnumField\n | DateField\n | TimeField\n | DatetimeField;\n\nexport type GroupField = {\n type: \"group\";\n value: (Base & Breakpoints & SingleFields)[];\n} & Base;\n\nexport type ArrayGroupField = {\n type: \"group[]\";\n value: (Base & Breakpoints & SingleFields)[];\n} & Base;\n\ntype Fields = SingleFields | GroupField | ArrayGroupField;\nexport type ModelField = Base & Breakpoints & Fields;\n\nexport type Model = {\n fields: ModelField[];\n};\n\n/**\n * INSTANCE TYPES\n * Types used to represent an instance of a model specification\n */\nexport type BaseFieldType = string | number | boolean | Date;\nexport type ArrayFieldType = string[] | number[];\nexport type SingleFieldType = BaseFieldType | ArrayFieldType;\nexport type GroupInstanceType = { [key: string]: SingleFieldType };\nexport type ArrayInstanceType = { [key: string]: SingleFieldType }[];\nexport type FieldType = SingleFieldType | GroupInstanceType;\n\nexport interface BasicModelInstance {\n id: string;\n [key: string]: FieldType;\n}\n\n/**\n * UTILITIES\n * Some functions used in several places to help to manage models\n */\nconst InitialStateZeroValue: Record<ModelFieldTypes | \"group\" | \"group[]\", FieldType | undefined> =\n {\n string: \"\",\n number: 0,\n boolean: false,\n enum: \"\",\n multienum: [],\n date: new Date(1970, 0, 1, 0, 0),\n time: new Date(1970, 0, 1, 0, 0),\n datetime: new Date(1970, 0, 1, 0, 0),\n group: {},\n \"group[]\": [],\n \"string[]\": [],\n \"number[]\": [],\n };\n\nconst getFieldValueOrZero = (\n field: ModelField,\n values: BasicModelInstance | GroupInstanceType | undefined,\n) => {\n return (\n (values && values[field.id]) ||\n (\"default\" in field && field.default) ||\n InitialStateZeroValue[field.type]\n );\n};\n\nexport const newInstanceFromValuesOrZeroValue = <T extends BasicModelInstance>(\n model: Model,\n values: T | undefined = undefined,\n): T => {\n const obj: Record<string, FieldType | undefined> = {};\n\n model.fields.forEach((field) => {\n if (field.type === \"group\") {\n const value: GroupInstanceType = {};\n field.value.forEach((groupField) => {\n value[groupField.id] = getFieldValueOrZero(\n groupField,\n values && (values[field.id] as GroupInstanceType),\n ) as SingleFieldType;\n });\n obj[field.id] = value;\n } else {\n obj[field.id] = getFieldValueOrZero(field, values);\n }\n });\n\n return obj as T;\n};\n","import { Color, useTheme } from \"@mui/material\";\n\ntype KeyColor = keyof Color;\n\nexport const useGetDefaultThemeColor = ({\n lightWeight = 100,\n darkWeight = 900,\n}: { lightWeight?: KeyColor; darkWeight?: KeyColor } = {}) => {\n const { palette } = useTheme();\n return palette.mode === \"light\" ? palette.grey[lightWeight] : palette.grey[darkWeight];\n};\n","import Grid from \"@mui/material/Grid\";\nimport Paper from \"@mui/material/Paper\";\nimport Box from \"@mui/material/Box\";\nimport Typography from \"@mui/material/Typography\";\nimport { useTheme } from \"@mui/material/styles\";\nimport { useGetDefaultThemeColor } from \"../utils\";\nimport { ValueItemElement } from \"../value-item\";\n\nexport interface GroupValueCardProps {\n title: string;\n subtitle?: string;\n centered?: boolean;\n children: ValueItemElement | ValueItemElement[];\n dense?: boolean;\n}\n\nexport const GroupValueCard = ({\n title,\n subtitle,\n centered,\n children,\n dense,\n}: GroupValueCardProps) => {\n const { typography } = useTheme();\n const defaultColor = useGetDefaultThemeColor({ lightWeight: 200, darkWeight: 800 });\n\n return (\n <Paper\n sx={{\n paddingBottom: dense ? 0 : 1,\n }}\n >\n <Box\n bgcolor={defaultColor}\n px={dense ? 1 : 2}\n py={dense ? 0.5 : 1}\n lineHeight={dense ? 0 : undefined}\n >\n <Typography variant={dense ? \"body1\" : \"h6\"} role=\"heading\" aria-level={1}>\n {title}\n </Typography>\n {subtitle && (\n <Typography\n variant={dense ? \"caption\" : \"body2\"}\n role=\"heading\"\n aria-level={2}\n lineHeight={dense ? typography.pxToRem(15) : undefined}\n >\n {subtitle}\n </Typography>\n )}\n </Box>\n <Grid\n container\n padding={1}\n rowSpacing={dense ? 1 : 2}\n justifyContent={centered ? \"center\" : \"flex-start\"}\n >\n {children}\n </Grid>\n </Paper>\n );\n};\n","import Box from \"@mui/material/Box\";\nimport Grid from \"@mui/material/Grid\";\nimport FormControlLabel from \"@mui/material/FormControlLabel\";\nimport Checkbox from \"@mui/material/Checkbox\";\nimport FormControl from \"@mui/material/FormControl\";\nimport InputLabel from \"@mui/material/InputLabel\";\nimport Select from \"@mui/material/Select\";\nimport MenuItem from \"@mui/material/MenuItem\";\nimport ListItemText from \"@mui/material/ListItemText\";\nimport TextField from \"@mui/material/TextField\";\nimport { SelectChangeEvent } from \"@mui/material/Select\";\nimport { DesktopDatePicker, TimePicker, DateTimePicker } from \"@mui/x-date-pickers\";\nimport { ChangeEvent, ReactElement } from \"react\";\nimport { useGetDefaultThemeColor } from \"../utils\";\nimport { GroupValueCard } from \"../group-value-card\";\nimport {\n ArrayFieldType,\n FieldType,\n ModelField,\n ModelFieldTypes,\n} from \"../generators/generators.model\";\n\nexport interface ModelFormField {\n field: ModelField;\n update: boolean;\n dense?: boolean;\n path?: string[];\n value: any;\n onChangeValue: (path: string[], value: any) => void;\n}\n\nexport const ModelFormField = ({\n field,\n path = [],\n value,\n dense,\n update,\n onChangeValue,\n}: ModelFormField) => {\n const handleCheckboxChange = (e: ChangeEvent<HTMLInputElement>) => {\n e.preventDefault();\n onChangeValue([...path, e.target.name], e.target.checked);\n };\n\n const handleSelectChange = (e: SelectChangeEvent<FieldType>) => {\n e.preventDefault();\n onChangeValue([...path, e.target.name], e.target.value);\n };\n\n const handleMultiSelectChange = (e: SelectChangeEvent<FieldType>) => {\n e.preventDefault();\n const { value } = e.target;\n const newValue = typeof value === \"string\" ? value.split(\",\") : value;\n onChangeValue([...path, e.target.name], newValue);\n };\n\n const handleInputChange = (\n e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>,\n type: ModelFieldTypes,\n ) => {\n e.preventDefault();\n\n let value: string | number | string[] | number[] = e.target.value;\n if (type === \"number\" && typeof value === \"string\") {\n value = parseInt(e.target.value, 10);\n } else if (type.includes(\"[]\")) {\n value = e.target.value.split(\",\");\n }\n onChangeValue([...path, e.target.name], value);\n };\n\n const handleDateChange = (value: FieldType | null, id: string) => {\n onChangeValue([...path, id], value);\n };\n\n const defaultColor = useGetDefaultThemeColor({ lightWeight: 200, darkWeight: 800 });\n\n const {\n id,\n type,\n name,\n description,\n updatable = true,\n required = true,\n xs,\n sm,\n md,\n lg,\n xl,\n } = field;\n const disabled: boolean = !updatable && update;\n\n let fieldInput: ReactElement;\n const size = dense ? \"small\" : \"medium\";\n if (type === \"group\") {\n fieldInput = (\n <GroupValueCard title={name} subtitle={description} dense={dense}>\n <Grid container spacing={2} sx={{ p: 2 }}>\n {field.value.map((f) => (\n <ModelFormField\n key={f.id}\n field={f}\n dense={dense}\n path={[...path, id]}\n value={value[f.id]}\n update={update}\n onChangeValue={onChangeValue}\n />\n ))}\n </Grid>\n </GroupValueCard>\n );\n } else if (type === \"boolean\") {\n fieldInput = (\n <Box sx={{ height: 1, display: \"flex\", alignItems: \"center\" }}>\n <FormControlLabel\n control={\n <Checkbox\n name={id}\n size={size}\n onChange={handleCheckboxChange}\n checked={value as boolean}\n disabled={disabled}\n />\n }\n label={name}\n />\n </Box>\n );\n } else if (type === \"enum\") {\n fieldInput = (\n <FormControl fullWidth>\n <InputLabel id={`${id}-select-label`}>{name}</InputLabel>\n <Select\n labelId={`${id}-select-label`}\n id={`${id}-select`}\n value={value}\n label={name}\n name={id}\n size={size}\n onChange={handleSelectChange}\n required={required}\n disabled={disabled}\n >\n {field.value.map((fieldValue) => (\n <MenuItem key={fieldValue} value={fieldValue}>\n {fieldValue}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n );\n } else if (type === \"multienum\") {\n fieldInput = (\n <FormControl fullWidth>\n <InputLabel id={`${id}-select-label`}>{name}</InputLabel>\n <Select\n labelId={`${id}-select-label`}\n id={`${id}-select`}\n value={value || []}\n renderValue={(selected) => (selected as ArrayFieldType).join(\", \")}\n label={name}\n name={id}\n size={size}\n onChange={handleMultiSelectChange}\n required={required}\n disabled={disabled}\n multiple\n >\n {field.value.map((fieldValue) => (\n <MenuItem key={fieldValue} value={fieldValue}>\n <Checkbox checked={((value as any[]) || []).includes(fieldValue)} />\n <ListItemText primary={fieldValue} />\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n );\n } else if (type === \"date\") {\n fieldInput = (\n <DesktopDatePicker\n label={name}\n format={field.format}\n value={value}\n slotProps={\n {\n field: {\n size,\n },\n } as any\n }\n disabled={disabled}\n onChange={(value) => handleDateChange(value, id)}\n />\n );\n } else if (type === \"time\") {\n fieldInput = (\n <TimePicker\n label={name}\n format={field.format}\n value={value}\n slotProps={\n {\n field: {\n size,\n },\n } as any\n }\n disabled={disabled}\n onChange={(value) => handleDateChange(value, id)}\n />\n );\n } else if (type === \"datetime\") {\n fieldInput = (\n <DateTimePicker\n label={name}\n format={field.format}\n value={value}\n slotProps={\n {\n field: {\n size,\n },\n } as any\n }\n disabled={disabled}\n onChange={(value) => handleDateChange(value, id)}\n />\n );\n } else if (type === \"group[]\") {\n return null;\n } else if (type.includes(\"[]\")) {\n fieldInput = (\n <TextField\n required={required}\n type=\"text\"\n label={name}\n name={id}\n size={size}\n variant=\"outlined\"\n helperText=\"Use comas to separate multiple values\"\n fullWidth\n disabled={disabled}\n value={(value as any[]).join(\",\")}\n onChange={(e) => handleInputChange(e, type)}\n />\n );\n } else {\n fieldInput = (\n <TextField\n required={required}\n type={type}\n label={name}\n size={size}\n name={id}\n variant=\"outlined\"\n fullWidth\n value={value}\n disabled={disabled}\n onChange={(e) => handleInputChange(e, type)}\n />\n );\n }\n\n return (\n <Grid item key={id} xs={xs} sm={sm} md={md} lg={lg} xl={xl}>\n {fieldInput}\n </Grid>\n );\n};\n","export default function _isPlaceholder(a) {\n return a != null && typeof a === 'object' && a['@@functional/placeholder'] === true;\n}","import _isPlaceholder from \"./_isPlaceholder.js\";\n/**\n * Optimized internal one-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\nexport default function _curry1(fn) {\n return function f1(a) {\n if (arguments.length === 0 || _isPlaceholder(a)) {\n return f1;\n } else {\n return fn.apply(this, arguments);\n }\n };\n}","import _curry1 from \"./_curry1.js\";\nimport _isPlaceholder from \"./_isPlaceholder.js\";\n/**\n * Optimized internal two-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\nexport default function _curry2(fn) {\n return function f2(a, b) {\n switch (arguments.length) {\n case 0:\n return f2;\n\n case 1:\n return _isPlaceholder(a) ? f2 : _curry1(function (_b) {\n return fn(a, _b);\n });\n\n default:\n return _isPlaceholder(a) && _isPlaceholder(b) ? f2 : _isPlaceholder(a) ? _curry1(function (_a) {\n return fn(_a, b);\n }) : _isPlaceholder(b) ? _curry1(function (_b) {\n return fn(a, _b);\n }) : fn(a, b);\n }\n };\n}","import _curry1 from \"./_curry1.js\";\nimport _curry2 from \"./_curry2.js\";\nimport _isPlaceholder from \"./_isPlaceholder.js\";\n/**\n * Optimized internal three-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\nexport default function _curry3(fn) {\n return function f3(a, b, c) {\n switch (arguments.length) {\n case 0:\n return f3;\n\n case 1:\n return _isPlaceholder(a) ? f3 : _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n });\n\n case 2:\n return _isPlaceholder(a) && _isPlaceholder(b) ? f3 : _isPlaceholder(a) ? _curry2(function (_a, _c) {\n return fn(_a, b, _c);\n }) : _isPlaceholder(b) ? _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n }) : _curry1(function (_c) {\n return fn(a, b, _c);\n });\n\n default:\n return _isPlaceholder(a) && _isPlaceholder(b) && _isPlaceholder(c) ? f3 : _isPlaceholder(a) && _isPlaceholder(b) ? _curry2(function (_a, _b) {\n return fn(_a, _b, c);\n }) : _isPlaceholder(a) && _isPlaceholder(c) ? _curry2(function (_a, _c) {\n return fn(_a, b, _c);\n }) : _isPlaceholder(b) && _isPlaceholder(c) ? _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n }) : _isPlaceholder(a) ? _curry1(function (_a) {\n return fn(_a, b, c);\n }) : _isPlaceholder(b) ? _curry1(function (_b) {\n return fn(a, _b, c);\n }) : _isPlaceholder(c) ? _curry1(function (_c) {\n return fn(a, b, _c);\n }) : fn(a, b, c);\n }\n };\n}","/**\n * Tests whether or not an object is an array.\n *\n * @private\n * @param {*} val The object to test.\n * @return {Boolean} `true` if `val` is an array, `false` otherwise.\n * @example\n *\n * _isArray([]); //=> true\n * _isArray(null); //=> false\n * _isArray({}); //=> false\n */\nexport default Array.isArray || function _isArray(val) {\n return val != null && val.length >= 0 && Object.prototype.toString.call(val) === '[object Array]';\n};","/**\n * Determine if the passed argument is an integer.\n *\n * @private\n * @param {*} n\n * @category Type\n * @return {Boolean}\n */\nexport default Number.isInteger || function _isInteger(n) {\n return n << 0 === n;\n};","import _curry1 from \"./internal/_curry1.js\";\n/**\n * Checks if the input value is `null` or `undefined`.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Type\n * @sig * -> Boolean\n * @param {*} x The value to test.\n * @return {Boolean} `true` if `x` is `undefined` or `null`, otherwise `false`.\n * @example\n *\n * R.isNil(null); //=> true\n * R.isNil(undefined); //=> true\n * R.isNil(0); //=> false\n * R.isNil([]); //=> false\n */\n\nvar isNil =\n/*#__PURE__*/\n_curry1(function isNil(x) {\n return x == null;\n});\n\nexport default isNil;","import _curry3 from \"./internal/_curry3.js\";\nimport _has from \"./internal/_has.js\";\nimport _isInteger from \"./internal/_isInteger.js\";\nimport _assoc from \"./internal/_assoc.js\";\nimport isNil from \"./isNil.js\";\n/**\n * Makes a shallow clone of an object, setting or overriding the nodes required\n * to create the given path, and placing the specific value at the tail end of\n * that path. Note that this copies and flattens prototype properties onto the\n * new object as well. All non-primitive properties are copied by reference.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Object\n * @typedefn Idx = String | Int | Symbol\n * @sig [Idx] -> a -> {a} -> {a}\n * @param {Array} path the path to set\n * @param {*} val The new value\n * @param {Object} obj The object to clone\n * @return {Object} A new object equivalent to the original except along the specified path.\n * @see R.dissocPath\n * @example\n *\n * R.assocPath(['a', 'b', 'c'], 42, {a: {b: {c: 0}}}); //=> {a: {b: {c: 42}}}\n *\n * // Any missing or non-object keys in path will be overridden\n * R.assocPath(['a', 'b', 'c'], 42, {a: 5}); //=> {a: {b: {c: 42}}}\n */\n\nvar assocPath =\n/*#__PURE__*/\n_curry3(function assocPath(path, val, obj) {\n if (path.length === 0) {\n return val;\n }\n\n var idx = path[0];\n\n if (path.length > 1) {\n var nextObj = !isNil(obj) && _has(idx, obj) && typeof obj[idx] === 'object' ? obj[idx] : _isInteger(path[1]) ? [] : {};\n val = assocPath(Array.prototype.slice.call(path, 1), val, nextObj);\n }\n\n return _assoc(idx, val, obj);\n});\n\nexport default assocPath;","export default function _has(prop, obj) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}","import _isArray from \"./_isArray.js\";\nimport _isInteger from \"./_isInteger.js\";\n/**\n * Makes a shallow clone of an object, setting or overriding the specified\n * property with the given value. Note that this copies and flattens prototype\n * properties onto the new object as well. All non-primitive properties are\n * copied by reference.\n *\n * @private\n * @param {String|Number} prop The property name to set\n * @param {*} val The new value\n * @param {Object|Array} obj The object to clone\n * @return {Object|Array} A new object equivalent to the original except for the changed property.\n */\n\nexport default function _assoc(prop, val, obj) {\n if (_isInteger(prop) && _isArray(obj)) {\n var arr = [].concat(obj);\n arr[prop] = val;\n return arr;\n }\n\n var result = {};\n\n for (var p in obj) {\n result[p] = obj[p];\n }\n\n result[prop] = val;\n return result;\n}","import Button from \"@mui/material/Button\";\nimport Grid from \"@mui/material/Grid\";\nimport { FormEvent, useMemo } from \"react\";\nimport { useState } from \"react\";\nimport {\n Model,\n BasicModelInstance,\n FieldType,\n newInstanceFromValuesOrZeroValue,\n} from \"../generators\";\nimport { ModelFormField } from \"./model-form-field\";\nimport { assocPath } from \"ramda\";\n\nexport interface ModelFormProps<T extends BasicModelInstance> {\n model: Model;\n dense?: boolean;\n initialValues?: T;\n saveButtonText: string;\n onSubmit: (values: T) => void;\n}\n\nexport const ModelForm = <T extends BasicModelInstance>({\n model,\n saveButtonText,\n dense,\n onSubmit,\n initialValues,\n}: ModelFormProps<T>) => {\n const valuesInitialState = useMemo(\n () => newInstanceFromValuesOrZeroValue<T>(model, initialValues),\n [model, initialValues],\n );\n const [values, setValues] = useState<T>(valuesInitialState);\n\n const setKeyValue = (path: string[], value: FieldType | null) => {\n setValues((v) => assocPath(path, value, v));\n };\n\n const handleSubmit = (e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n onSubmit(values);\n };\n\n return (\n <Grid container component=\"form\" spacing={2} onSubmit={handleSubmit}>\n {model.fields.map((f) => (\n <ModelFormField\n key={f.id}\n dense={dense}\n field={f}\n value={values[f.id]}\n update={!!initialValues}\n onChangeValue={setKeyValue}\n />\n ))}\n <Grid item xs={12}>\n <Button type=\"submit\" variant=\"contained\" size={dense ? \"small\" : \"medium\"}>\n {saveButtonText}\n </Button>\n </Grid>\n </Grid>\n );\n};\n"],"names":["InitialStateZeroValue","string","number","boolean","enum","multienum","date","Date","time","datetime","group","getFieldValueOrZero","field","values","id","default","type","useGetDefaultThemeColor","lightWeight","darkWeight","palette","useTheme","mode","grey","GroupValueCard","title","subtitle","centered","children","dense","typography","defaultColor","_jsxs","Paper","sx","paddingBottom","Box","bgcolor","px","py","lineHeight","undefined","_jsx","Typography","variant","role","pxToRem","Grid","container","padding","rowSpacing","justifyContent","ModelFormField","path","value","update","onChangeValue","handleCheckboxChange","e","preventDefault","target","name","checked","handleSelectChange","handleMultiSelectChange","newValue","split","handleInputChange","parseInt","includes","handleDateChange","description","updatable","required","xs","sm","md","lg","xl","disabled","fieldInput","size","spacing","p","map","f","height","display","alignItems","FormControlLabel","control","Checkbox","onChange","label","FormControl","fullWidth","InputLabel","Select","labelId","fieldValue","MenuItem","renderValue","selected","join","multiple","ListItemText","primary","DesktopDatePicker","format","slotProps","TimePicker","DateTimePicker","TextField","helperText","item","_isPlaceholder","a","_curry1","fn","f1","arguments","length","apply","this","_curry2","f2","b","_b","_a","_curry3","f3","c","_c","_isArray","Array","isArray","val","Object","prototype","toString","call","_isInteger","Number","isInteger","n","isNil","x","assocPath","obj","idx","nextObj","prop","hasOwnProperty","_has","slice","arr","concat","result","_assoc","ModelForm","model","saveButtonText","onSubmit","initialValues","valuesInitialState","useMemo","fields","forEach","groupField","newInstanceFromValuesOrZeroValue","setValues","useState","setKeyValue","v","component","Button"],"mappings":"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"}
|