@ayasofyazilim/ui 0.0.4 → 0.0.6
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/dist/components/accordion.js +1 -1
- package/dist/components/accordion.js.map +1 -1
- package/dist/components/alert-dialog.js +2 -2
- package/dist/components/alert-dialog.js.map +1 -1
- package/dist/components/alert.js +1 -1
- package/dist/components/alert.js.map +1 -1
- package/dist/components/avatar.js +1 -1
- package/dist/components/avatar.js.map +1 -1
- package/dist/components/badge.js +1 -1
- package/dist/components/badge.js.map +1 -1
- package/dist/components/breadcrumb.js +1 -1
- package/dist/components/breadcrumb.js.map +1 -1
- package/dist/components/button-group.js +2 -2
- package/dist/components/button-group.js.map +1 -1
- package/dist/components/button.js +1 -1
- package/dist/components/button.js.map +1 -1
- package/dist/components/calendar.js +2 -5
- package/dist/components/calendar.js.map +1 -1
- package/dist/components/card.js +1 -1
- package/dist/components/card.js.map +1 -1
- package/dist/components/carousel.js +2 -2
- package/dist/components/carousel.js.map +1 -1
- package/dist/components/chart.js +1 -1
- package/dist/components/chart.js.map +1 -1
- package/dist/components/checkbox.js +1 -1
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/command.js +2 -2
- package/dist/components/command.js.map +1 -1
- package/dist/components/context-menu.js +1 -1
- package/dist/components/context-menu.js.map +1 -1
- package/dist/components/dialog.js +1 -1
- package/dist/components/dialog.js.map +1 -1
- package/dist/components/drawer.js +1 -1
- package/dist/components/drawer.js.map +1 -1
- package/dist/components/dropdown-menu.js +1 -1
- package/dist/components/dropdown-menu.js.map +1 -1
- package/dist/components/field.js +3 -3
- package/dist/components/field.js.map +1 -1
- package/dist/components/form.js +2 -2
- package/dist/components/form.js.map +1 -1
- package/dist/components/hover-card.js +1 -1
- package/dist/components/hover-card.js.map +1 -1
- package/dist/components/input-group.js +4 -4
- package/dist/components/input-group.js.map +1 -1
- package/dist/components/input-otp.js +1 -1
- package/dist/components/input-otp.js.map +1 -1
- package/dist/components/input.js +1 -1
- package/dist/components/input.js.map +1 -1
- package/dist/components/item.js +2 -2
- package/dist/components/item.js.map +1 -1
- package/dist/components/kbd.js +1 -1
- package/dist/components/kbd.js.map +1 -1
- package/dist/components/label.js +1 -1
- package/dist/components/label.js.map +1 -1
- package/dist/components/menubar.js +1 -1
- package/dist/components/menubar.js.map +1 -1
- package/dist/components/navigation-menu.js +1 -1
- package/dist/components/navigation-menu.js.map +1 -1
- package/dist/components/pagination.js +2 -4
- package/dist/components/pagination.js.map +1 -1
- package/dist/components/progress.js +1 -1
- package/dist/components/progress.js.map +1 -1
- package/dist/components/radio-group.js +1 -1
- package/dist/components/radio-group.js.map +1 -1
- package/dist/components/resizable.js +1 -1
- package/dist/components/resizable.js.map +1 -1
- package/dist/components/scroll-area.js +1 -1
- package/dist/components/scroll-area.js.map +1 -1
- package/dist/components/select.js +1 -1
- package/dist/components/select.js.map +1 -1
- package/dist/components/separator.js +1 -1
- package/dist/components/separator.js.map +1 -1
- package/dist/components/sheet.js +1 -1
- package/dist/components/sheet.js.map +1 -1
- package/dist/components/skeleton.js +1 -1
- package/dist/components/skeleton.js.map +1 -1
- package/dist/components/slider.js +1 -1
- package/dist/components/slider.js.map +1 -1
- package/dist/components/spinner.js +1 -1
- package/dist/components/spinner.js.map +1 -1
- package/dist/components/stepper.js +1 -1
- package/dist/components/stepper.js.map +1 -1
- package/dist/components/switch.js +1 -1
- package/dist/components/switch.js.map +1 -1
- package/dist/components/table.js +1 -1
- package/dist/components/table.js.map +1 -1
- package/dist/components/tabs.js +1 -1
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/textarea.js +1 -1
- package/dist/components/textarea.js.map +1 -1
- package/dist/components/toggle-group.js +2 -2
- package/dist/components/toggle-group.js.map +1 -1
- package/dist/components/toggle.js +1 -1
- package/dist/components/toggle.js.map +1 -1
- package/dist/components/tooltip.js +1 -1
- package/dist/components/tooltip.js.map +1 -1
- package/dist/custom/action-button.js +2 -4
- package/dist/custom/action-button.js.map +1 -1
- package/dist/custom/async-select.js +7 -7
- package/dist/custom/async-select.js.map +1 -1
- package/dist/custom/awesome-not-found.js +3 -3
- package/dist/custom/awesome-not-found.js.map +1 -1
- package/dist/custom/charts/area-chart.js +2 -2
- package/dist/custom/charts/area-chart.js.map +1 -1
- package/dist/custom/charts/bar-chart.js +2 -2
- package/dist/custom/charts/bar-chart.js.map +1 -1
- package/dist/custom/charts/chart-card.js +3 -3
- package/dist/custom/charts/chart-card.js.map +1 -1
- package/dist/custom/charts/pie-chart.js +2 -2
- package/dist/custom/charts/pie-chart.js.map +1 -1
- package/dist/custom/charts/radar-chart.js +2 -2
- package/dist/custom/charts/radar-chart.js.map +1 -1
- package/dist/custom/combobox.js +8 -8
- package/dist/custom/combobox.js.map +1 -1
- package/dist/custom/confirm-dialog.js +3 -3
- package/dist/custom/confirm-dialog.js.map +1 -1
- package/dist/custom/country-selector.js +6 -6
- package/dist/custom/country-selector.js.map +1 -1
- package/dist/custom/date-picker/calendar-rac.js +1 -1
- package/dist/custom/date-picker/calendar-rac.js.map +1 -1
- package/dist/custom/date-picker/datefield-rac.js +1 -1
- package/dist/custom/date-picker/datefield-rac.js.map +1 -1
- package/dist/custom/date-picker/index.js +3 -3
- package/dist/custom/date-picker/index.js.map +1 -1
- package/dist/custom/date-picker-old.js +4 -4
- package/dist/custom/date-picker-old.js.map +1 -1
- package/dist/custom/date-tooltip.js +1 -1
- package/dist/custom/date-tooltip.js.map +1 -1
- package/dist/custom/document-scanner/corner-adjustment/action-buttons.js +1 -1
- package/dist/custom/document-scanner/corner-adjustment/action-buttons.js.map +1 -1
- package/dist/custom/document-scanner/corner-adjustment/corner-handle.js +1 -1
- package/dist/custom/document-scanner/corner-adjustment/corner-handle.js.map +1 -1
- package/dist/custom/document-scanner/index.js +2 -2
- package/dist/custom/document-scanner/index.js.map +1 -1
- package/dist/custom/document-viewer/controllers.js +3 -3
- package/dist/custom/document-viewer/controllers.js.map +1 -1
- package/dist/custom/document-viewer/index.js +1 -1
- package/dist/custom/document-viewer/index.js.map +1 -1
- package/dist/custom/document-viewer/renderers/pdf.js +1 -1
- package/dist/custom/document-viewer/renderers/pdf.js.map +1 -1
- package/dist/custom/email-input/email.js +4 -4
- package/dist/custom/email-input/email.js.map +1 -1
- package/dist/custom/file-uploader.js +6 -6
- package/dist/custom/file-uploader.js.map +1 -1
- package/dist/custom/filter-component/fields/async-select.js +1 -1
- package/dist/custom/filter-component/fields/async-select.js.map +1 -1
- package/dist/custom/filter-component/fields/date.js +3 -3
- package/dist/custom/filter-component/fields/date.js.map +1 -1
- package/dist/custom/filter-component/fields/multi-select.js +1 -1
- package/dist/custom/filter-component/fields/multi-select.js.map +1 -1
- package/dist/custom/filter-component/index.js +4 -4
- package/dist/custom/filter-component/index.js.map +1 -1
- package/dist/custom/image-canvas.js +1 -1
- package/dist/custom/image-canvas.js.map +1 -1
- package/dist/custom/master-data-grid/components/filters/client-filter.js +2 -2
- package/dist/custom/master-data-grid/components/filters/client-filter.js.map +1 -1
- package/dist/custom/master-data-grid/components/filters/multi-filter-dialog.js +2 -2
- package/dist/custom/master-data-grid/components/filters/multi-filter-dialog.js.map +1 -1
- package/dist/custom/master-data-grid/components/filters/server-filter.js +5 -5
- package/dist/custom/master-data-grid/components/filters/server-filter.js.map +1 -1
- package/dist/custom/master-data-grid/components/table/cell-renderer.js +1 -1
- package/dist/custom/master-data-grid/components/table/cell-renderer.js.map +1 -1
- package/dist/custom/master-data-grid/hooks/use-columns.js +1 -1
- package/dist/custom/master-data-grid/hooks/use-columns.js.map +1 -1
- package/dist/custom/multi-select.js +6 -6
- package/dist/custom/multi-select.js.map +1 -1
- package/dist/custom/password-input.js +1 -1
- package/dist/custom/password-input.js.map +1 -1
- package/dist/custom/phone-input.js +2 -2
- package/dist/custom/phone-input.js.map +1 -1
- package/dist/custom/schema-form/custom/label.js +3 -3
- package/dist/custom/schema-form/custom/label.js.map +1 -1
- package/dist/custom/schema-form/fields/base-input-field.js +2 -2
- package/dist/custom/schema-form/fields/base-input-field.js.map +1 -1
- package/dist/custom/schema-form/fields/field.js +2 -2
- package/dist/custom/schema-form/fields/field.js.map +1 -1
- package/dist/custom/schema-form/fields/table-array/array-field-item.js +5 -5
- package/dist/custom/schema-form/fields/table-array/array-field-item.js.map +1 -1
- package/dist/custom/schema-form/fields/table-array/array-field-template.js +3 -3
- package/dist/custom/schema-form/fields/table-array/array-field-template.js.map +1 -1
- package/dist/custom/schema-form/index.js +1 -1
- package/dist/custom/schema-form/index.js.map +1 -1
- package/dist/custom/schema-form/templates/description.js +1 -1
- package/dist/custom/schema-form/templates/description.js.map +1 -1
- package/dist/custom/schema-form/templates/submit.js +2 -2
- package/dist/custom/schema-form/templates/submit.js.map +1 -1
- package/dist/custom/schema-form/utils/schemas.js +1 -1
- package/dist/custom/schema-form/utils/schemas.js.map +1 -1
- package/dist/custom/schema-form/widgets/boolean.js +4 -4
- package/dist/custom/schema-form/widgets/boolean.js.map +1 -1
- package/dist/custom/schema-form/widgets/combobox.js +7 -7
- package/dist/custom/schema-form/widgets/combobox.js.map +1 -1
- package/dist/custom/schema-form/widgets/date.js +1 -1
- package/dist/custom/schema-form/widgets/date.js.map +1 -1
- package/dist/custom/schema-form/widgets/email.js +2 -2
- package/dist/custom/schema-form/widgets/email.js.map +1 -1
- package/dist/custom/schema-form/widgets/password.js +1 -1
- package/dist/custom/schema-form/widgets/password.js.map +1 -1
- package/dist/custom/schema-form/widgets/phone.js +1 -1
- package/dist/custom/schema-form/widgets/phone.js.map +1 -1
- package/dist/custom/schema-form/widgets/select.js +3 -3
- package/dist/custom/schema-form/widgets/select.js.map +1 -1
- package/dist/custom/schema-form/widgets/selectable.js +1 -1
- package/dist/custom/schema-form/widgets/selectable.js.map +1 -1
- package/dist/custom/schema-form/widgets/string-array.js +3 -3
- package/dist/custom/schema-form/widgets/string-array.js.map +1 -1
- package/dist/custom/schema-form/widgets/url.js +2 -2
- package/dist/custom/schema-form/widgets/url.js.map +1 -1
- package/dist/custom/section-layout-v2.js +3 -3
- package/dist/custom/section-layout-v2.js.map +1 -1
- package/dist/custom/select-tabs.js +2 -2
- package/dist/custom/select-tabs.js.map +1 -1
- package/dist/custom/stepper.js +2 -2
- package/dist/custom/stepper.js.map +1 -1
- package/dist/custom/tab-layout.js +2 -2
- package/dist/custom/tab-layout.js.map +1 -1
- package/dist/custom/tanstack-table/fields/tanstack-table-column-header.js +3 -3
- package/dist/custom/tanstack-table/fields/tanstack-table-column-header.js.map +1 -1
- package/dist/custom/tanstack-table/fields/tanstack-table-filter-date.js +4 -4
- package/dist/custom/tanstack-table/fields/tanstack-table-filter-date.js.map +1 -1
- package/dist/custom/tanstack-table/fields/tanstack-table-filter-faceted.js +6 -6
- package/dist/custom/tanstack-table/fields/tanstack-table-filter-faceted.js.map +1 -1
- package/dist/custom/tanstack-table/fields/tanstack-table-filter-text.js +5 -8
- package/dist/custom/tanstack-table/fields/tanstack-table-filter-text.js.map +1 -1
- package/dist/custom/tanstack-table/fields/tanstack-table-pagination.js +2 -2
- package/dist/custom/tanstack-table/fields/tanstack-table-pagination.js.map +1 -1
- package/dist/custom/tanstack-table/fields/tanstack-table-plain-table.js +2 -2
- package/dist/custom/tanstack-table/fields/tanstack-table-plain-table.js.map +1 -1
- package/dist/custom/tanstack-table/fields/tanstack-table-row-actions-confirmation.js +2 -2
- package/dist/custom/tanstack-table/fields/tanstack-table-row-actions-confirmation.js.map +1 -1
- package/dist/custom/tanstack-table/fields/tanstack-table-row-actions-custom-dialog.js +2 -2
- package/dist/custom/tanstack-table/fields/tanstack-table-row-actions-custom-dialog.js.map +1 -1
- package/dist/custom/tanstack-table/fields/tanstack-table-row-actions.js +3 -3
- package/dist/custom/tanstack-table/fields/tanstack-table-row-actions.js.map +1 -1
- package/dist/custom/tanstack-table/fields/tanstack-table-table-actions-custom-dialog.js +3 -3
- package/dist/custom/tanstack-table/fields/tanstack-table-table-actions-custom-dialog.js.map +1 -1
- package/dist/custom/tanstack-table/fields/tanstack-table-table-actions-schemaform-dialog.js +2 -2
- package/dist/custom/tanstack-table/fields/tanstack-table-table-actions-schemaform-dialog.js.map +1 -1
- package/dist/custom/tanstack-table/fields/tanstack-table-toolbar.js +1 -1
- package/dist/custom/tanstack-table/fields/tanstack-table-toolbar.js.map +1 -1
- package/dist/custom/tanstack-table/fields/tanstack-table-view-options.js +2 -2
- package/dist/custom/tanstack-table/fields/tanstack-table-view-options.js.map +1 -1
- package/dist/custom/tanstack-table/utils/columns-by-row-data.js +3 -3
- package/dist/custom/tanstack-table/utils/columns-by-row-data.js.map +1 -1
- package/dist/custom/tanstack-table/utils/editable-columns-by-row-data.js +5 -5
- package/dist/custom/tanstack-table/utils/editable-columns-by-row-data.js.map +1 -1
- package/dist/custom/timeline.js +1 -1
- package/dist/custom/timeline.js.map +1 -1
- package/dist/custom/tree.js +1 -1
- package/dist/custom/tree.js.map +1 -1
- package/dist/custom/webcam.js +2 -2
- package/dist/custom/webcam.js.map +1 -1
- package/package.json +13 -84
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/custom/schema-form/index.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { lodash } from \"@repo/ayasofyazilim-ui/lib/utils\";\r\nimport { Form } from \"@rjsf/shadcn\";\r\nimport { customizeValidator } from \"@rjsf/validator-ajv8\";\r\nimport type { RJSFValidationError, FormValidation } from \"@rjsf/utils\";\r\nimport { useCallback, useMemo } from \"react\";\r\nimport {\r\n ArrayFieldItemTemplate,\r\n ArrayFieldTemplate,\r\n BaseInputTemplate,\r\n FieldTemplate,\r\n ObjectFieldTemplate,\r\n} from \"./fields\";\r\nimport { DescriptionFieldTemplate, SubmitButton } from \"./templates\";\r\nimport { SchemaFormProps } from \"./types\";\r\nimport {\r\n createSchemaWithFilters,\r\n removeFieldsfromGenericSchema,\r\n isValueEmpty,\r\n cleanFormDataForSubmit,\r\n cleanHiddenFieldsFromFormData,\r\n createRuntimeValidator,\r\n createDynamicSchema,\r\n applyFieldDependencies,\r\n} from \"./utils\";\r\nimport {\r\n CheckboxWidget,\r\n DateTimeWidget,\r\n DateWidget,\r\n EmailInputWidget,\r\n PasswordInputWidget,\r\n PhoneWithParseWidget,\r\n PhoneWithValueWidget,\r\n SelectWidget,\r\n SwitchWidget,\r\n URLInputWidget,\r\n} from \"./widgets\";\r\n\r\nexport * from \"./custom\";\r\nexport * from \"./types\";\r\nexport * from \"./utils\";\r\nexport * from \"./widgets\";\r\n\r\nconst INTERNAL_WIDGETS = {\r\n switch: SwitchWidget,\r\n checkbox: CheckboxWidget,\r\n date: DateWidget,\r\n \"date-time\": DateTimeWidget,\r\n email: EmailInputWidget,\r\n password: PasswordInputWidget,\r\n phone: PhoneWithValueWidget,\r\n \"phone-with-parse\": PhoneWithParseWidget,\r\n select: SelectWidget,\r\n url: URLInputWidget,\r\n};\r\n\r\nconst INTERNAL_TEMPLATES = {\r\n ObjectFieldTemplate,\r\n BaseInputTemplate,\r\n FieldTemplate,\r\n DescriptionFieldTemplate,\r\n ButtonTemplates: { SubmitButton },\r\n};\r\n\r\nconst FIELDS_TO_REMOVE = [\"extraProperties\", \"additionalProperties\"];\r\n\r\nexport function SchemaForm<T = any>(props: SchemaFormProps<T>) {\r\n const {\r\n validator: customValidator,\r\n schema: originalSchema,\r\n widgets,\r\n fields,\r\n templates,\r\n filter,\r\n useTableForArrayFields = false,\r\n formData,\r\n transformErrors: userTransformErrors,\r\n runtimeDependencyConfig,\r\n fieldDependencies,\r\n onSubmit: userOnSubmit,\r\n customValidate: userCustomValidate,\r\n ...restProps\r\n } = props;\r\n\r\n const validatorToUse = useMemo(() => {\r\n if (customValidator) return customValidator;\r\n\r\n return customizeValidator({\r\n ajvOptionsOverrides: {\r\n removeAdditional: true,\r\n },\r\n });\r\n }, [customValidator]);\r\n\r\n const processedSchema = useMemo(() => {\r\n let schema = originalSchema;\r\n\r\n if (fieldDependencies) {\r\n schema = applyFieldDependencies(schema, fieldDependencies);\r\n }\r\n\r\n if (runtimeDependencyConfig && formData) {\r\n schema = createDynamicSchema(\r\n schema,\r\n runtimeDependencyConfig,\r\n formData as Record<string, unknown>\r\n );\r\n }\r\n\r\n if (filter) {\r\n schema = createSchemaWithFilters({\r\n filter,\r\n schema,\r\n });\r\n }\r\n return removeFieldsfromGenericSchema(schema, FIELDS_TO_REMOVE);\r\n }, [\r\n originalSchema,\r\n filter,\r\n runtimeDependencyConfig,\r\n formData,\r\n fieldDependencies,\r\n ]);\r\n\r\n const transformErrors = useCallback(\r\n (errors: RJSFValidationError[]): RJSFValidationError[] => {\r\n const errorsToFilterWhenEmpty = [\"format\", \"minLength\", \"pattern\"];\r\n\r\n let filteredErrors = errors.filter((error) => {\r\n if (!error.name || !errorsToFilterWhenEmpty.includes(error.name))\r\n return true;\r\n\r\n const path = (error.property || \"\")\r\n .replace(/^\\./, \"\")\r\n .split(\".\")\r\n .filter(Boolean);\r\n\r\n if (path.length === 0 || !formData) return true;\r\n\r\n let value: unknown = formData;\r\n for (const key of path) {\r\n if (value && typeof value === \"object\" && key in value) {\r\n value = (value as Record<string, unknown>)[key];\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n return !isValueEmpty(value);\r\n });\r\n\r\n if (userTransformErrors) {\r\n filteredErrors = userTransformErrors(filteredErrors, {} as any);\r\n }\r\n\r\n return filteredErrors;\r\n },\r\n [formData, userTransformErrors]\r\n );\r\n\r\n const combinedCustomValidate = useCallback(\r\n (formDataToValidate: T, errors: FormValidation<T>): FormValidation<T> => {\r\n let validationErrors = errors;\r\n\r\n if (runtimeDependencyConfig) {\r\n const runtimeValidator = createRuntimeValidator(\r\n runtimeDependencyConfig\r\n );\r\n validationErrors = runtimeValidator(\r\n formDataToValidate as Record<string, unknown>,\r\n validationErrors as FormValidation<Record<string, unknown>>\r\n ) as FormValidation<T>;\r\n }\r\n\r\n if (userCustomValidate) {\r\n validationErrors = userCustomValidate(\r\n formDataToValidate,\r\n validationErrors\r\n );\r\n }\r\n\r\n return validationErrors;\r\n },\r\n [runtimeDependencyConfig, userCustomValidate]\r\n );\r\n\r\n const memoizedWidgets = useMemo(\r\n () => lodash.merge(INTERNAL_WIDGETS, widgets),\r\n [widgets]\r\n );\r\n const memoizedFields = useMemo(() => fields, [fields]);\r\n const memoizedTemplates = useMemo(() => {\r\n return lodash.merge(\r\n INTERNAL_TEMPLATES,\r\n templates,\r\n useTableForArrayFields\r\n ? { ArrayFieldItemTemplate, ArrayFieldTemplate }\r\n : {}\r\n );\r\n }, [templates]);\r\n\r\n const handleSubmit = useCallback(\r\n (\r\n data: Parameters<NonNullable<typeof userOnSubmit>>[0],\r\n event: React.FormEvent<HTMLFormElement>\r\n ) => {\r\n if (!userOnSubmit) return;\r\n\r\n let submitData = data;\r\n let cleanedFormData = data.formData as T;\r\n\r\n if (fieldDependencies && cleanedFormData) {\r\n cleanedFormData = cleanHiddenFieldsFromFormData(\r\n cleanedFormData as Record<string, unknown>,\r\n fieldDependencies\r\n ) as T;\r\n }\r\n\r\n if (runtimeDependencyConfig && cleanedFormData) {\r\n cleanedFormData = cleanFormDataForSubmit(\r\n cleanedFormData as Record<string, unknown>,\r\n runtimeDependencyConfig\r\n ) as T;\r\n }\r\n\r\n if (fieldDependencies || runtimeDependencyConfig) {\r\n submitData = { ...data, formData: cleanedFormData };\r\n }\r\n\r\n userOnSubmit(submitData, event);\r\n },\r\n [userOnSubmit, runtimeDependencyConfig, fieldDependencies]\r\n );\r\n\r\n return (\r\n <Form\r\n {...restProps}\r\n customValidate={\r\n runtimeDependencyConfig || userCustomValidate\r\n ? combinedCustomValidate\r\n : undefined\r\n }\r\n formContext={{\r\n useTableForArrayFields,\r\n }}\r\n formData={formData}\r\n onSubmit={handleSubmit}\r\n schema={processedSchema}\r\n transformErrors={transformErrors}\r\n validator={validatorToUse}\r\n widgets={memoizedWidgets}\r\n fields={memoizedFields}\r\n templates={memoizedTemplates}\r\n noHtml5Validate={restProps.noHtml5Validate ?? true}\r\n showErrorList={restProps.showErrorList ?? false}\r\n />\r\n );\r\n}\r\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/custom/schema-form/index.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { lodash } from \"@ayasofyazilim/ui/lib/utils\";\r\nimport { Form } from \"@rjsf/shadcn\";\r\nimport { customizeValidator } from \"@rjsf/validator-ajv8\";\r\nimport type { RJSFValidationError, FormValidation } from \"@rjsf/utils\";\r\nimport { useCallback, useMemo } from \"react\";\r\nimport {\r\n ArrayFieldItemTemplate,\r\n ArrayFieldTemplate,\r\n BaseInputTemplate,\r\n FieldTemplate,\r\n ObjectFieldTemplate,\r\n} from \"./fields\";\r\nimport { DescriptionFieldTemplate, SubmitButton } from \"./templates\";\r\nimport { SchemaFormProps } from \"./types\";\r\nimport {\r\n createSchemaWithFilters,\r\n removeFieldsfromGenericSchema,\r\n isValueEmpty,\r\n cleanFormDataForSubmit,\r\n cleanHiddenFieldsFromFormData,\r\n createRuntimeValidator,\r\n createDynamicSchema,\r\n applyFieldDependencies,\r\n} from \"./utils\";\r\nimport {\r\n CheckboxWidget,\r\n DateTimeWidget,\r\n DateWidget,\r\n EmailInputWidget,\r\n PasswordInputWidget,\r\n PhoneWithParseWidget,\r\n PhoneWithValueWidget,\r\n SelectWidget,\r\n SwitchWidget,\r\n URLInputWidget,\r\n} from \"./widgets\";\r\n\r\nexport * from \"./custom\";\r\nexport * from \"./types\";\r\nexport * from \"./utils\";\r\nexport * from \"./widgets\";\r\n\r\nconst INTERNAL_WIDGETS = {\r\n switch: SwitchWidget,\r\n checkbox: CheckboxWidget,\r\n date: DateWidget,\r\n \"date-time\": DateTimeWidget,\r\n email: EmailInputWidget,\r\n password: PasswordInputWidget,\r\n phone: PhoneWithValueWidget,\r\n \"phone-with-parse\": PhoneWithParseWidget,\r\n select: SelectWidget,\r\n url: URLInputWidget,\r\n};\r\n\r\nconst INTERNAL_TEMPLATES = {\r\n ObjectFieldTemplate,\r\n BaseInputTemplate,\r\n FieldTemplate,\r\n DescriptionFieldTemplate,\r\n ButtonTemplates: { SubmitButton },\r\n};\r\n\r\nconst FIELDS_TO_REMOVE = [\"extraProperties\", \"additionalProperties\"];\r\n\r\nexport function SchemaForm<T = any>(props: SchemaFormProps<T>) {\r\n const {\r\n validator: customValidator,\r\n schema: originalSchema,\r\n widgets,\r\n fields,\r\n templates,\r\n filter,\r\n useTableForArrayFields = false,\r\n formData,\r\n transformErrors: userTransformErrors,\r\n runtimeDependencyConfig,\r\n fieldDependencies,\r\n onSubmit: userOnSubmit,\r\n customValidate: userCustomValidate,\r\n ...restProps\r\n } = props;\r\n\r\n const validatorToUse = useMemo(() => {\r\n if (customValidator) return customValidator;\r\n\r\n return customizeValidator({\r\n ajvOptionsOverrides: {\r\n removeAdditional: true,\r\n },\r\n });\r\n }, [customValidator]);\r\n\r\n const processedSchema = useMemo(() => {\r\n let schema = originalSchema;\r\n\r\n if (fieldDependencies) {\r\n schema = applyFieldDependencies(schema, fieldDependencies);\r\n }\r\n\r\n if (runtimeDependencyConfig && formData) {\r\n schema = createDynamicSchema(\r\n schema,\r\n runtimeDependencyConfig,\r\n formData as Record<string, unknown>,\r\n );\r\n }\r\n\r\n if (filter) {\r\n schema = createSchemaWithFilters({\r\n filter,\r\n schema,\r\n });\r\n }\r\n return removeFieldsfromGenericSchema(schema, FIELDS_TO_REMOVE);\r\n }, [\r\n originalSchema,\r\n filter,\r\n runtimeDependencyConfig,\r\n formData,\r\n fieldDependencies,\r\n ]);\r\n\r\n const transformErrors = useCallback(\r\n (errors: RJSFValidationError[]): RJSFValidationError[] => {\r\n const errorsToFilterWhenEmpty = [\"format\", \"minLength\", \"pattern\"];\r\n\r\n let filteredErrors = errors.filter((error) => {\r\n if (!error.name || !errorsToFilterWhenEmpty.includes(error.name))\r\n return true;\r\n\r\n const path = (error.property || \"\")\r\n .replace(/^\\./, \"\")\r\n .split(\".\")\r\n .filter(Boolean);\r\n\r\n if (path.length === 0 || !formData) return true;\r\n\r\n let value: unknown = formData;\r\n for (const key of path) {\r\n if (value && typeof value === \"object\" && key in value) {\r\n value = (value as Record<string, unknown>)[key];\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n return !isValueEmpty(value);\r\n });\r\n\r\n if (userTransformErrors) {\r\n filteredErrors = userTransformErrors(filteredErrors, {} as any);\r\n }\r\n\r\n return filteredErrors;\r\n },\r\n [formData, userTransformErrors],\r\n );\r\n\r\n const combinedCustomValidate = useCallback(\r\n (formDataToValidate: T, errors: FormValidation<T>): FormValidation<T> => {\r\n let validationErrors = errors;\r\n\r\n if (runtimeDependencyConfig) {\r\n const runtimeValidator = createRuntimeValidator(\r\n runtimeDependencyConfig,\r\n );\r\n validationErrors = runtimeValidator(\r\n formDataToValidate as Record<string, unknown>,\r\n validationErrors as FormValidation<Record<string, unknown>>,\r\n ) as FormValidation<T>;\r\n }\r\n\r\n if (userCustomValidate) {\r\n validationErrors = userCustomValidate(\r\n formDataToValidate,\r\n validationErrors,\r\n );\r\n }\r\n\r\n return validationErrors;\r\n },\r\n [runtimeDependencyConfig, userCustomValidate],\r\n );\r\n\r\n const memoizedWidgets = useMemo(\r\n () => lodash.merge(INTERNAL_WIDGETS, widgets),\r\n [widgets],\r\n );\r\n const memoizedFields = useMemo(() => fields, [fields]);\r\n const memoizedTemplates = useMemo(() => {\r\n return lodash.merge(\r\n INTERNAL_TEMPLATES,\r\n templates,\r\n useTableForArrayFields\r\n ? { ArrayFieldItemTemplate, ArrayFieldTemplate }\r\n : {},\r\n );\r\n }, [templates]);\r\n\r\n const handleSubmit = useCallback(\r\n (\r\n data: Parameters<NonNullable<typeof userOnSubmit>>[0],\r\n event: React.FormEvent<HTMLFormElement>,\r\n ) => {\r\n if (!userOnSubmit) return;\r\n\r\n let submitData = data;\r\n let cleanedFormData = data.formData as T;\r\n\r\n if (fieldDependencies && cleanedFormData) {\r\n cleanedFormData = cleanHiddenFieldsFromFormData(\r\n cleanedFormData as Record<string, unknown>,\r\n fieldDependencies,\r\n ) as T;\r\n }\r\n\r\n if (runtimeDependencyConfig && cleanedFormData) {\r\n cleanedFormData = cleanFormDataForSubmit(\r\n cleanedFormData as Record<string, unknown>,\r\n runtimeDependencyConfig,\r\n ) as T;\r\n }\r\n\r\n if (fieldDependencies || runtimeDependencyConfig) {\r\n submitData = { ...data, formData: cleanedFormData };\r\n }\r\n\r\n userOnSubmit(submitData, event);\r\n },\r\n [userOnSubmit, runtimeDependencyConfig, fieldDependencies],\r\n );\r\n\r\n return (\r\n <Form\r\n {...restProps}\r\n customValidate={\r\n runtimeDependencyConfig || userCustomValidate\r\n ? combinedCustomValidate\r\n : undefined\r\n }\r\n formContext={{\r\n useTableForArrayFields,\r\n }}\r\n formData={formData}\r\n onSubmit={handleSubmit}\r\n schema={processedSchema}\r\n transformErrors={transformErrors}\r\n validator={validatorToUse}\r\n widgets={memoizedWidgets}\r\n fields={memoizedFields}\r\n templates={memoizedTemplates}\r\n noHtml5Validate={restProps.noHtml5Validate ?? true}\r\n showErrorList={restProps.showErrorList ?? false}\r\n />\r\n );\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
Tooltip,
|
|
4
4
|
TooltipTrigger,
|
|
5
5
|
TooltipContent
|
|
6
|
-
} from "@
|
|
6
|
+
} from "@ayasofyazilim/ui/components/tooltip";
|
|
7
7
|
import { InfoIcon } from "lucide-react";
|
|
8
8
|
function DescriptionFieldTemplate(props) {
|
|
9
9
|
const { description, id } = props;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/custom/schema-form/templates/description.tsx"],"sourcesContent":["import {\r\n Tooltip,\r\n TooltipTrigger,\r\n TooltipContent,\r\n} from \"@
|
|
1
|
+
{"version":3,"sources":["../../../../src/custom/schema-form/templates/description.tsx"],"sourcesContent":["import {\r\n Tooltip,\r\n TooltipTrigger,\r\n TooltipContent,\r\n} from \"@ayasofyazilim/ui/components/tooltip\";\r\nimport { DescriptionFieldProps } from \"@rjsf/utils\";\r\nimport { InfoIcon, MessageCircleQuestion } from \"lucide-react\";\r\n\r\nexport function DescriptionFieldTemplate(props: DescriptionFieldProps) {\r\n const { description, id } = props;\r\n if (!description) return null;\r\n return (\r\n <Tooltip>\r\n <TooltipTrigger id={id} type=\"button\">\r\n <InfoIcon className=\"size-3.5 ml-1 text-muted-foreground cursor-help\" />\r\n </TooltipTrigger>\r\n <TooltipContent>{description}</TooltipContent>\r\n </Tooltip>\r\n );\r\n}\r\n"],"mappings":"AAYI,SAEI,KAFJ;AAZJ;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,gBAAuC;AAEzC,SAAS,yBAAyB,OAA8B;AACrE,QAAM,EAAE,aAAa,GAAG,IAAI;AAC5B,MAAI,CAAC,YAAa,QAAO;AACzB,SACE,qBAAC,WACC;AAAA,wBAAC,kBAAe,IAAQ,MAAK,UAC3B,8BAAC,YAAS,WAAU,mDAAkD,GACxE;AAAA,IACA,oBAAC,kBAAgB,uBAAY;AAAA,KAC/B;AAEJ;","names":[]}
|
|
@@ -2,8 +2,8 @@ import { jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import {
|
|
3
3
|
getSubmitButtonOptions
|
|
4
4
|
} from "@rjsf/utils";
|
|
5
|
-
import { Button } from "@
|
|
6
|
-
import { cn } from "@
|
|
5
|
+
import { Button } from "@ayasofyazilim/ui/components/button";
|
|
6
|
+
import { cn } from "@ayasofyazilim/ui/lib/utils";
|
|
7
7
|
function SubmitButton(props) {
|
|
8
8
|
const { uiSchema } = props;
|
|
9
9
|
const {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/custom/schema-form/templates/submit.tsx"],"sourcesContent":["import React from \"react\";\r\nimport {\r\n getSubmitButtonOptions,\r\n SubmitButtonProps,\r\n UISchemaSubmitButtonOptions,\r\n} from \"@rjsf/utils\";\r\nimport { Button } from \"@
|
|
1
|
+
{"version":3,"sources":["../../../../src/custom/schema-form/templates/submit.tsx"],"sourcesContent":["import React from \"react\";\r\nimport {\r\n getSubmitButtonOptions,\r\n SubmitButtonProps,\r\n UISchemaSubmitButtonOptions,\r\n} from \"@rjsf/utils\";\r\nimport { Button } from \"@ayasofyazilim/ui/components/button\";\r\nimport { cn } from \"@ayasofyazilim/ui/lib/utils\";\r\n\r\nexport function SubmitButton(props: SubmitButtonProps) {\r\n const { uiSchema } = props;\r\n const {\r\n norender,\r\n props: options,\r\n disabled,\r\n submitText,\r\n }: UISchemaSubmitButtonOptions & {\r\n disabled?: boolean;\r\n } = getSubmitButtonOptions(uiSchema);\r\n if (norender) {\r\n return null;\r\n }\r\n return (\r\n <Button\r\n type=\"submit\"\r\n className={cn(\"w-full mt-3\", options?.className)}\r\n disabled={options?.disabled || disabled}\r\n >\r\n {submitText || \"Submit\"}\r\n </Button>\r\n );\r\n}\r\n"],"mappings":"AAuBI;AAtBJ;AAAA,EACE;AAAA,OAGK;AACP,SAAS,cAAc;AACvB,SAAS,UAAU;AAEZ,SAAS,aAAa,OAA0B;AACrD,QAAM,EAAE,SAAS,IAAI;AACrB,QAAM;AAAA,IACJ;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,EACF,IAEI,uBAAuB,QAAQ;AACnC,MAAI,UAAU;AACZ,WAAO;AAAA,EACT;AACA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAW,GAAG,eAAe,SAAS,SAAS;AAAA,MAC/C,UAAU,SAAS,YAAY;AAAA,MAE9B,wBAAc;AAAA;AAAA,EACjB;AAEJ;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/custom/schema-form/utils/schemas.ts"],"sourcesContent":["import { GenericObjectType } from \"@rjsf/utils\";\r\nimport {\r\n CreateFieldConfigWithResourceProps,\r\n FilteredObject,\r\n FilterType,\r\n UiSchema,\r\n} from \"../types\";\r\nimport { lodash } from \"@repo/ayasofyazilim-ui/lib/utils\";\r\n\r\n/**\r\n *\r\n */\r\nexport function bulkCreateUiSchema<T>({\r\n elements,\r\n config,\r\n}: {\r\n config: UiSchema<T>;\r\n elements: Array<keyof T>;\r\n}): UiSchema<T> {\r\n const uiSchema = {};\r\n for (const element of elements) {\r\n Object.assign(uiSchema, { [element]: config });\r\n }\r\n return filterUndefinedAndEmpty(uiSchema);\r\n}\r\n\r\n/**\r\n * Creates a UiSchema with internationalization resources and optional overrides.\r\n */\r\nexport function createUiSchemaWithResource<T = unknown>({\r\n resources,\r\n schema,\r\n extend,\r\n name = \"Form\",\r\n}: CreateFieldConfigWithResourceProps): UiSchema<T> {\r\n const baseUiSchema = uiSchemaFromSchema({\r\n object: schema,\r\n resources,\r\n name,\r\n constantKey: name,\r\n });\r\n\r\n const targetSchema = lodash.get(baseUiSchema, name, {});\r\n\r\n if (extend) {\r\n // Lodash merge handles deep merging recursively and safely\r\n return lodash.merge({}, targetSchema, extend);\r\n }\r\n\r\n return targetSchema;\r\n}\r\n\r\n/**\r\n * Filters a JSON Schema based on include/exclude/fullExclude rules.\r\n */\r\nexport function createSchemaWithFilters<T = string>({\r\n schema,\r\n filter,\r\n}: {\r\n filter: FilterType<T>;\r\n schema: GenericObjectType;\r\n}): GenericObjectType {\r\n const { keys, type } = filter;\r\n // Deep clone first to avoid mutating the original schema reference\r\n const modifiedSchema = lodash.cloneDeep(schema);\r\n\r\n const isWildCard = (key: string) => lodash.some(keys, (k) => k === `*${key}`);\r\n const hasKey = (key: string) => lodash.includes(keys, key);\r\n\r\n const filterRecursive = (\r\n currentObj: GenericObjectType,\r\n parentPath: string = \"\"\r\n ): void => {\r\n if (!currentObj.properties && !currentObj.items) return;\r\n\r\n // Handle Properties\r\n if (currentObj.properties) {\r\n const keptKeys: string[] = [];\r\n\r\n currentObj.properties = lodash.transform(\r\n currentObj.properties,\r\n (result, property, key) => {\r\n const propertyKey = String(key);\r\n const currentPath = parentPath\r\n ? `${parentPath}.${propertyKey}`\r\n : propertyKey;\r\n\r\n let shouldKeep = false;\r\n\r\n switch (type) {\r\n case \"include\":\r\n // Keep if explicitly included or if it's a wildcard match\r\n shouldKeep = hasKey(currentPath) || isWildCard(currentPath);\r\n break;\r\n case \"exclude\":\r\n case \"fullExclude\":\r\n // Keep if NOT in the exclude list\r\n shouldKeep = !hasKey(currentPath);\r\n break;\r\n }\r\n\r\n if (shouldKeep) {\r\n result[propertyKey] = property;\r\n keptKeys.push(propertyKey);\r\n\r\n // Recursive step for Objects and Arrays\r\n if (property.type === \"object\") {\r\n filterRecursive(property, currentPath);\r\n } else if (property.type === \"array\" && property.items) {\r\n filterRecursive(property.items, currentPath);\r\n }\r\n }\r\n },\r\n {} as GenericObjectType[\"properties\"]\r\n );\r\n\r\n // Update or Remove 'required' array based on kept keys\r\n if (currentObj.required) {\r\n currentObj.required = lodash.intersection(\r\n currentObj.required,\r\n keptKeys\r\n );\r\n if (lodash.isEmpty(currentObj.required)) {\r\n delete currentObj.required;\r\n }\r\n }\r\n }\r\n };\r\n\r\n filterRecursive(modifiedSchema);\r\n return modifiedSchema;\r\n}\r\n\r\n/**\r\n * Recursively removes specific keys from any object or array.\r\n */\r\nexport function removeFieldsfromGenericSchema<T>(\r\n obj: T,\r\n keysToRemove: string | string[]\r\n): T {\r\n const keysArray = lodash.castArray(keysToRemove);\r\n\r\n const transform = (value: unknown): unknown => {\r\n if (lodash.isArray(value)) {\r\n return lodash.map(value, transform);\r\n }\r\n\r\n if (lodash.isPlainObject(value)) {\r\n return lodash.transform(\r\n value as Record<string, unknown>,\r\n (result, val, key) => {\r\n if (!keysArray.includes(key)) {\r\n result[key] = transform(val);\r\n }\r\n },\r\n {} as Record<string, unknown>\r\n );\r\n }\r\n\r\n return value;\r\n };\r\n\r\n return transform(obj) as T;\r\n}\r\n\r\n/**\r\n * Merges two UISchema objects recursively.\r\n */\r\n\r\nexport function mergeUISchemaObjects<\r\n T extends UiSchema<T> | UiSchema,\r\n U extends UiSchema<T> | UiSchema,\r\n>(source: T, target: U): T & U {\r\n // We pass {} as the first argument to ensure we create a new object\r\n // rather than mutating 'source'.\r\n return lodash.merge({}, source, target) as T & U;\r\n}\r\n\r\n/**\r\n * Helper: Generates UiSchema structure from JSON Schema + Resources\r\n */\r\nfunction uiSchemaFromSchema({\r\n name,\r\n object,\r\n resources,\r\n constantKey,\r\n}: {\r\n constantKey: string;\r\n name: string;\r\n object: GenericObjectType;\r\n resources: Record<string, string>;\r\n}) {\r\n const uiSchema: Record<string, any> = { [name]: {} };\r\n\r\n // 1. Handle Objects\r\n if (object?.type === \"object\" && object.properties) {\r\n lodash.forEach(object.properties, (propValue, propKey) => {\r\n const nestedSchema = uiSchemaFromSchema({\r\n name: propKey,\r\n object: propValue,\r\n resources,\r\n constantKey: `${constantKey}.${propKey}`,\r\n });\r\n\r\n // Merge nested results into the current name scope\r\n Object.assign(uiSchema[name], {\r\n \"ui:title\": resources[constantKey],\r\n ...nestedSchema,\r\n });\r\n });\r\n }\r\n\r\n // 2. Handle Arrays\r\n else if (object?.type === \"array\" && object.items?.properties) {\r\n const items = lodash.reduce(\r\n object.items.properties,\r\n (acc, propValue, propKey) => {\r\n const nested = uiSchemaFromSchema({\r\n name: propKey,\r\n object: propValue,\r\n resources,\r\n constantKey: `${constantKey}.${propKey}`,\r\n });\r\n return lodash.merge(acc, nested);\r\n },\r\n {}\r\n );\r\n\r\n Object.assign(uiSchema[name], {\r\n \"ui:title\": resources[constantKey] || lodash.startCase(name),\r\n items,\r\n });\r\n }\r\n\r\n // 3. Handle Primitives (Plain fields)\r\n else if (object) {\r\n const getResource = (suffix?: string) =>\r\n resources[suffix ? `${constantKey}.${suffix}` : constantKey];\r\n\r\n const uiSchemaItem: Record<string, any> = {\r\n \"ui:title\": getResource() || lodash.startCase(name),\r\n \"ui:placeholder\": getResource(\"ui:placeholder\"),\r\n };\r\n\r\n if (object.enum) {\r\n uiSchemaItem[\"ui:enumNames\"] = object.enum.map(\r\n (key: string) => resources[`${constantKey}.${key}`] || key\r\n );\r\n uiSchemaItem[\"ui:options\"] = {\r\n label: true,\r\n emptyValue: getResource(\"emptyValue\"),\r\n searchPlaceholder: getResource(\"searchPlaceholder\"),\r\n searchResultLabel: getResource(\"searchResultLabel\"),\r\n };\r\n }\r\n\r\n Object.assign(uiSchema[name], uiSchemaItem);\r\n }\r\n\r\n return filterUndefinedAndEmpty(uiSchema);\r\n}\r\n\r\n/**\r\n * Recursively filters out undefined values and empty objects/arrays\r\n */\r\nfunction filterUndefinedAndEmpty<T>(obj: T): FilteredObject<T> {\r\n if (!lodash.isObject(obj)) {\r\n return obj as FilteredObject<T>;\r\n }\r\n\r\n // Use omitBy to filter undefined, then mapValues to recurse\r\n const result = lodash.transform(\r\n obj as unknown as object,\r\n (acc: any, value, key) => {\r\n const filteredValue = filterUndefinedAndEmpty(value);\r\n\r\n const isValid =\r\n filteredValue !== undefined &&\r\n !(lodash.isPlainObject(filteredValue) && lodash.isEmpty(filteredValue));\r\n\r\n if (isValid) {\r\n acc[key] = filteredValue;\r\n }\r\n },\r\n {}\r\n );\r\n\r\n return result as FilteredObject<T>;\r\n}\r\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/custom/schema-form/utils/schemas.ts"],"sourcesContent":["import { GenericObjectType } from \"@rjsf/utils\";\r\nimport {\r\n CreateFieldConfigWithResourceProps,\r\n FilteredObject,\r\n FilterType,\r\n UiSchema,\r\n} from \"../types\";\r\nimport { lodash } from \"@ayasofyazilim/ui/lib/utils\";\r\n\r\n/**\r\n *\r\n */\r\nexport function bulkCreateUiSchema<T>({\r\n elements,\r\n config,\r\n}: {\r\n config: UiSchema<T>;\r\n elements: Array<keyof T>;\r\n}): UiSchema<T> {\r\n const uiSchema = {};\r\n for (const element of elements) {\r\n Object.assign(uiSchema, { [element]: config });\r\n }\r\n return filterUndefinedAndEmpty(uiSchema);\r\n}\r\n\r\n/**\r\n * Creates a UiSchema with internationalization resources and optional overrides.\r\n */\r\nexport function createUiSchemaWithResource<T = unknown>({\r\n resources,\r\n schema,\r\n extend,\r\n name = \"Form\",\r\n}: CreateFieldConfigWithResourceProps): UiSchema<T> {\r\n const baseUiSchema = uiSchemaFromSchema({\r\n object: schema,\r\n resources,\r\n name,\r\n constantKey: name,\r\n });\r\n\r\n const targetSchema = lodash.get(baseUiSchema, name, {});\r\n\r\n if (extend) {\r\n // Lodash merge handles deep merging recursively and safely\r\n return lodash.merge({}, targetSchema, extend);\r\n }\r\n\r\n return targetSchema;\r\n}\r\n\r\n/**\r\n * Filters a JSON Schema based on include/exclude/fullExclude rules.\r\n */\r\nexport function createSchemaWithFilters<T = string>({\r\n schema,\r\n filter,\r\n}: {\r\n filter: FilterType<T>;\r\n schema: GenericObjectType;\r\n}): GenericObjectType {\r\n const { keys, type } = filter;\r\n // Deep clone first to avoid mutating the original schema reference\r\n const modifiedSchema = lodash.cloneDeep(schema);\r\n\r\n const isWildCard = (key: string) => lodash.some(keys, (k) => k === `*${key}`);\r\n const hasKey = (key: string) => lodash.includes(keys, key);\r\n\r\n const filterRecursive = (\r\n currentObj: GenericObjectType,\r\n parentPath: string = \"\",\r\n ): void => {\r\n if (!currentObj.properties && !currentObj.items) return;\r\n\r\n // Handle Properties\r\n if (currentObj.properties) {\r\n const keptKeys: string[] = [];\r\n\r\n currentObj.properties = lodash.transform(\r\n currentObj.properties,\r\n (result, property, key) => {\r\n const propertyKey = String(key);\r\n const currentPath = parentPath\r\n ? `${parentPath}.${propertyKey}`\r\n : propertyKey;\r\n\r\n let shouldKeep = false;\r\n\r\n switch (type) {\r\n case \"include\":\r\n // Keep if explicitly included or if it's a wildcard match\r\n shouldKeep = hasKey(currentPath) || isWildCard(currentPath);\r\n break;\r\n case \"exclude\":\r\n case \"fullExclude\":\r\n // Keep if NOT in the exclude list\r\n shouldKeep = !hasKey(currentPath);\r\n break;\r\n }\r\n\r\n if (shouldKeep) {\r\n result[propertyKey] = property;\r\n keptKeys.push(propertyKey);\r\n\r\n // Recursive step for Objects and Arrays\r\n if (property.type === \"object\") {\r\n filterRecursive(property, currentPath);\r\n } else if (property.type === \"array\" && property.items) {\r\n filterRecursive(property.items, currentPath);\r\n }\r\n }\r\n },\r\n {} as GenericObjectType[\"properties\"],\r\n );\r\n\r\n // Update or Remove 'required' array based on kept keys\r\n if (currentObj.required) {\r\n currentObj.required = lodash.intersection(\r\n currentObj.required,\r\n keptKeys,\r\n );\r\n if (lodash.isEmpty(currentObj.required)) {\r\n delete currentObj.required;\r\n }\r\n }\r\n }\r\n };\r\n\r\n filterRecursive(modifiedSchema);\r\n return modifiedSchema;\r\n}\r\n\r\n/**\r\n * Recursively removes specific keys from any object or array.\r\n */\r\nexport function removeFieldsfromGenericSchema<T>(\r\n obj: T,\r\n keysToRemove: string | string[],\r\n): T {\r\n const keysArray = lodash.castArray(keysToRemove);\r\n\r\n const transform = (value: unknown): unknown => {\r\n if (lodash.isArray(value)) {\r\n return lodash.map(value, transform);\r\n }\r\n\r\n if (lodash.isPlainObject(value)) {\r\n return lodash.transform(\r\n value as Record<string, unknown>,\r\n (result, val, key) => {\r\n if (!keysArray.includes(key)) {\r\n result[key] = transform(val);\r\n }\r\n },\r\n {} as Record<string, unknown>,\r\n );\r\n }\r\n\r\n return value;\r\n };\r\n\r\n return transform(obj) as T;\r\n}\r\n\r\n/**\r\n * Merges two UISchema objects recursively.\r\n */\r\n\r\nexport function mergeUISchemaObjects<\r\n T extends UiSchema<T> | UiSchema,\r\n U extends UiSchema<T> | UiSchema,\r\n>(source: T, target: U): T & U {\r\n // We pass {} as the first argument to ensure we create a new object\r\n // rather than mutating 'source'.\r\n return lodash.merge({}, source, target) as T & U;\r\n}\r\n\r\n/**\r\n * Helper: Generates UiSchema structure from JSON Schema + Resources\r\n */\r\nfunction uiSchemaFromSchema({\r\n name,\r\n object,\r\n resources,\r\n constantKey,\r\n}: {\r\n constantKey: string;\r\n name: string;\r\n object: GenericObjectType;\r\n resources: Record<string, string>;\r\n}) {\r\n const uiSchema: Record<string, any> = { [name]: {} };\r\n\r\n // 1. Handle Objects\r\n if (object?.type === \"object\" && object.properties) {\r\n lodash.forEach(object.properties, (propValue, propKey) => {\r\n const nestedSchema = uiSchemaFromSchema({\r\n name: propKey,\r\n object: propValue,\r\n resources,\r\n constantKey: `${constantKey}.${propKey}`,\r\n });\r\n\r\n // Merge nested results into the current name scope\r\n Object.assign(uiSchema[name], {\r\n \"ui:title\": resources[constantKey],\r\n ...nestedSchema,\r\n });\r\n });\r\n }\r\n\r\n // 2. Handle Arrays\r\n else if (object?.type === \"array\" && object.items?.properties) {\r\n const items = lodash.reduce(\r\n object.items.properties,\r\n (acc, propValue, propKey) => {\r\n const nested = uiSchemaFromSchema({\r\n name: propKey,\r\n object: propValue,\r\n resources,\r\n constantKey: `${constantKey}.${propKey}`,\r\n });\r\n return lodash.merge(acc, nested);\r\n },\r\n {},\r\n );\r\n\r\n Object.assign(uiSchema[name], {\r\n \"ui:title\": resources[constantKey] || lodash.startCase(name),\r\n items,\r\n });\r\n }\r\n\r\n // 3. Handle Primitives (Plain fields)\r\n else if (object) {\r\n const getResource = (suffix?: string) =>\r\n resources[suffix ? `${constantKey}.${suffix}` : constantKey];\r\n\r\n const uiSchemaItem: Record<string, any> = {\r\n \"ui:title\": getResource() || lodash.startCase(name),\r\n \"ui:placeholder\": getResource(\"ui:placeholder\"),\r\n };\r\n\r\n if (object.enum) {\r\n uiSchemaItem[\"ui:enumNames\"] = object.enum.map(\r\n (key: string) => resources[`${constantKey}.${key}`] || key,\r\n );\r\n uiSchemaItem[\"ui:options\"] = {\r\n label: true,\r\n emptyValue: getResource(\"emptyValue\"),\r\n searchPlaceholder: getResource(\"searchPlaceholder\"),\r\n searchResultLabel: getResource(\"searchResultLabel\"),\r\n };\r\n }\r\n\r\n Object.assign(uiSchema[name], uiSchemaItem);\r\n }\r\n\r\n return filterUndefinedAndEmpty(uiSchema);\r\n}\r\n\r\n/**\r\n * Recursively filters out undefined values and empty objects/arrays\r\n */\r\nfunction filterUndefinedAndEmpty<T>(obj: T): FilteredObject<T> {\r\n if (!lodash.isObject(obj)) {\r\n return obj as FilteredObject<T>;\r\n }\r\n\r\n // Use omitBy to filter undefined, then mapValues to recurse\r\n const result = lodash.transform(\r\n obj as unknown as object,\r\n (acc: any, value, key) => {\r\n const filteredValue = filterUndefinedAndEmpty(value);\r\n\r\n const isValid =\r\n filteredValue !== undefined &&\r\n !(lodash.isPlainObject(filteredValue) && lodash.isEmpty(filteredValue));\r\n\r\n if (isValid) {\r\n acc[key] = filteredValue;\r\n }\r\n },\r\n {},\r\n );\r\n\r\n return result as FilteredObject<T>;\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Checkbox } from "@
|
|
3
|
-
import { Label } from "@
|
|
4
|
-
import { Switch } from "@
|
|
5
|
-
import { cn } from "@
|
|
2
|
+
import { Checkbox } from "@ayasofyazilim/ui/components/checkbox";
|
|
3
|
+
import { Label } from "@ayasofyazilim/ui/components/label";
|
|
4
|
+
import { Switch } from "@ayasofyazilim/ui/components/switch";
|
|
5
|
+
import { cn } from "@ayasofyazilim/ui/lib/utils";
|
|
6
6
|
const SwitchWidget = (props) => {
|
|
7
7
|
const { id, name, onChange, value, defaultValue, disabled, uiSchema } = props;
|
|
8
8
|
const required = uiSchema?.["ui:required"] || props.required;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/custom/schema-form/widgets/boolean.tsx"],"sourcesContent":["import { Checkbox } from \"@
|
|
1
|
+
{"version":3,"sources":["../../../../src/custom/schema-form/widgets/boolean.tsx"],"sourcesContent":["import { Checkbox } from \"@ayasofyazilim/ui/components/checkbox\";\r\nimport { Label } from \"@ayasofyazilim/ui/components/label\";\r\nimport { Switch } from \"@ayasofyazilim/ui/components/switch\";\r\nimport { cn } from \"@ayasofyazilim/ui/lib/utils\";\r\nimport { WidgetProps } from \"@rjsf/utils\";\r\nimport { ReactNode } from \"react\";\r\n\r\nexport const SwitchWidget = (props: WidgetProps) => {\r\n const { id, name, onChange, value, defaultValue, disabled, uiSchema } = props;\r\n const required = uiSchema?.[\"ui:required\"] || props.required;\r\n return (\r\n <BooleanWrapper widgetProps={props}>\r\n <Switch\r\n id={id}\r\n data-testid={id}\r\n onCheckedChange={() => {\r\n onChange(!value);\r\n }}\r\n checked={value}\r\n defaultValue={value || defaultValue}\r\n name={name}\r\n disabled={disabled}\r\n required={required}\r\n />\r\n </BooleanWrapper>\r\n );\r\n};\r\n\r\nexport const CheckboxWidget = (props: WidgetProps) => {\r\n const { id, name, onChange, value, defaultValue, disabled, uiSchema } = props;\r\n const required = uiSchema?.[\"ui:required\"] || props.required;\r\n return (\r\n <BooleanWrapper widgetProps={props}>\r\n <Checkbox\r\n id={id}\r\n data-testid={id}\r\n onCheckedChange={() => {\r\n onChange(!value);\r\n }}\r\n checked={value}\r\n defaultValue={value || defaultValue}\r\n name={name}\r\n disabled={disabled}\r\n required={required}\r\n />\r\n </BooleanWrapper>\r\n );\r\n};\r\n\r\nfunction BooleanWrapper({\r\n children,\r\n widgetProps,\r\n}: {\r\n children: ReactNode;\r\n widgetProps: WidgetProps;\r\n}) {\r\n const { id, className, label, uiSchema } = widgetProps;\r\n const required = uiSchema?.[\"ui:required\"] || widgetProps.required;\r\n const displayLabel = uiSchema?.displayLabel;\r\n return (\r\n <div\r\n data-wrapper=\"boolean\"\r\n className={cn(\r\n \"flex items-center gap-2 h-9 px-2 border rounded-md shadow-xs\",\r\n className,\r\n )}\r\n >\r\n {children}\r\n {displayLabel !== false && (\r\n <Label id={id} htmlFor={id} className=\"w-full\">\r\n {label}\r\n {required && \"*\"}\r\n </Label>\r\n )}\r\n </div>\r\n );\r\n}\r\n"],"mappings":"AAYM,cAyDE,YAzDF;AAZN,SAAS,gBAAgB;AACzB,SAAS,aAAa;AACtB,SAAS,cAAc;AACvB,SAAS,UAAU;AAIZ,MAAM,eAAe,CAAC,UAAuB;AAClD,QAAM,EAAE,IAAI,MAAM,UAAU,OAAO,cAAc,UAAU,SAAS,IAAI;AACxE,QAAM,WAAW,WAAW,aAAa,KAAK,MAAM;AACpD,SACE,oBAAC,kBAAe,aAAa,OAC3B;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,eAAa;AAAA,MACb,iBAAiB,MAAM;AACrB,iBAAS,CAAC,KAAK;AAAA,MACjB;AAAA,MACA,SAAS;AAAA,MACT,cAAc,SAAS;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACF,GACF;AAEJ;AAEO,MAAM,iBAAiB,CAAC,UAAuB;AACpD,QAAM,EAAE,IAAI,MAAM,UAAU,OAAO,cAAc,UAAU,SAAS,IAAI;AACxE,QAAM,WAAW,WAAW,aAAa,KAAK,MAAM;AACpD,SACE,oBAAC,kBAAe,aAAa,OAC3B;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,eAAa;AAAA,MACb,iBAAiB,MAAM;AACrB,iBAAS,CAAC,KAAK;AAAA,MACjB;AAAA,MACA,SAAS;AAAA,MACT,cAAc,SAAS;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACF,GACF;AAEJ;AAEA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA;AACF,GAGG;AACD,QAAM,EAAE,IAAI,WAAW,OAAO,SAAS,IAAI;AAC3C,QAAM,WAAW,WAAW,aAAa,KAAK,YAAY;AAC1D,QAAM,eAAe,UAAU;AAC/B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,gBAAa;AAAA,MACb,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,QACA,iBAAiB,SAChB,qBAAC,SAAM,IAAQ,SAAS,IAAI,WAAU,UACnC;AAAA;AAAA,UACA,YAAY;AAAA,WACf;AAAA;AAAA;AAAA,EAEJ;AAEJ;","names":[]}
|
|
@@ -2,8 +2,8 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { ChevronsUpDown } from "lucide-react";
|
|
3
3
|
import { CheckIcon } from "lucide-react";
|
|
4
4
|
import { useState } from "react";
|
|
5
|
-
import { Badge } from "@
|
|
6
|
-
import { Button } from "@
|
|
5
|
+
import { Badge } from "@ayasofyazilim/ui/components/badge";
|
|
6
|
+
import { Button } from "@ayasofyazilim/ui/components/button";
|
|
7
7
|
import {
|
|
8
8
|
Command,
|
|
9
9
|
CommandEmpty,
|
|
@@ -11,19 +11,19 @@ import {
|
|
|
11
11
|
CommandInput,
|
|
12
12
|
CommandItem,
|
|
13
13
|
CommandList
|
|
14
|
-
} from "@
|
|
14
|
+
} from "@ayasofyazilim/ui/components/command";
|
|
15
15
|
import {
|
|
16
16
|
Drawer,
|
|
17
17
|
DrawerContent,
|
|
18
18
|
DrawerTrigger
|
|
19
|
-
} from "@
|
|
19
|
+
} from "@ayasofyazilim/ui/components/drawer";
|
|
20
20
|
import {
|
|
21
21
|
Popover,
|
|
22
22
|
PopoverContent,
|
|
23
23
|
PopoverTrigger
|
|
24
|
-
} from "@
|
|
25
|
-
import { useMediaQuery } from "@
|
|
26
|
-
import { cn } from "@
|
|
24
|
+
} from "@ayasofyazilim/ui/components/popover";
|
|
25
|
+
import { useMediaQuery } from "@ayasofyazilim/ui/hooks/use-media-query";
|
|
26
|
+
import { cn } from "@ayasofyazilim/ui/lib/utils";
|
|
27
27
|
function CustomCombobox(props) {
|
|
28
28
|
const {
|
|
29
29
|
value,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/custom/schema-form/widgets/combobox.tsx"],"sourcesContent":["import { ChevronsUpDown } from \"lucide-react\";\r\nimport { WidgetProps } from \"@rjsf/utils\";\r\nimport { CheckIcon } from \"lucide-react\";\r\nimport { Dispatch, ReactNode, SetStateAction, useState } from \"react\";\r\nimport { Badge } from \"@repo/ayasofyazilim-ui/components/badge\";\r\nimport { Button } from \"@repo/ayasofyazilim-ui/components/button\";\r\nimport {\r\n Command,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandInput,\r\n CommandItem,\r\n CommandList,\r\n} from \"@repo/ayasofyazilim-ui/components/command\";\r\nimport {\r\n Drawer,\r\n DrawerContent,\r\n DrawerTrigger,\r\n} from \"@repo/ayasofyazilim-ui/components/drawer\";\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from \"@repo/ayasofyazilim-ui/components/popover\";\r\nimport { useMediaQuery } from \"@repo/ayasofyazilim-ui/hooks/use-media-query\";\r\nimport { cn } from \"@repo/ayasofyazilim-ui/lib/utils\";\r\n\r\ntype BadgeOptions = { className?: string; showValue?: boolean; label?: string };\r\n\r\ntype CustomComboboxProps<T> = {\r\n emptyValue?: string;\r\n list: Array<T> | null | undefined;\r\n onValueChange?: Dispatch<SetStateAction<T | null | undefined>>;\r\n searchPlaceholder?: string;\r\n searchResultLabel?: string;\r\n selectIdentifier: keyof T;\r\n selectLabel: keyof T;\r\n disabledItems?: T[keyof T][];\r\n badges?: Partial<Record<keyof T, BadgeOptions>>;\r\n customItemRenderer?: (values: T) => ReactNode | undefined | string;\r\n} & WidgetProps;\r\n\r\nexport function CustomCombobox<T>(props: CustomComboboxProps<T>) {\r\n const {\r\n value,\r\n defaultValue,\r\n list,\r\n selectIdentifier,\r\n selectLabel,\r\n disabled,\r\n emptyValue = \"Please select\",\r\n } = props;\r\n const isDesktop = useMediaQuery(\"(min-width: 768px)\");\r\n const [open, setOpen] = useState(false);\r\n const fieldValue = value || defaultValue;\r\n const fieldValueDisplayName = list?.find(\r\n (x) => x[selectIdentifier] === fieldValue\r\n )?.[selectLabel];\r\n const DesktopContent = (\r\n <Popover open={open} onOpenChange={setOpen} modal>\r\n <PopoverTrigger\r\n asChild\r\n disabled={disabled}\r\n className={cn(disabled && \"cursor-not-allowed\")}\r\n >\r\n <Button\r\n id={props.id}\r\n data-testid={props.id}\r\n type=\"button\"\r\n variant=\"outline\"\r\n role=\"combobox\"\r\n className={cn(\r\n \"text-muted-foreground w-full justify-between font-normal shadow-xs hover:bg-white overflow-hidden\",\r\n fieldValueDisplayName && \"text-foreground\",\r\n disabled &&\r\n \"disabled:pointer-events-auto hover:bg-background hover:text-muted-foreground\"\r\n )}\r\n >\r\n <span className=\"truncate has-[role=dialog]:max-w-xs\">\r\n {typeof fieldValueDisplayName !== \"undefined\" &&\r\n fieldValueDisplayName !== null\r\n ? fieldValueDisplayName.toString()\r\n : emptyValue}\r\n </span>\r\n <ChevronsUpDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"p-0\">\r\n <List {...props} setOpen={setOpen} />\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n\r\n const MobileContent = (\r\n <Drawer open={open} onOpenChange={setOpen}>\r\n <DrawerTrigger asChild>\r\n <Button\r\n data-testid={props.id}\r\n type=\"button\"\r\n disabled={disabled}\r\n variant=\"outline\"\r\n className={cn(\r\n \"text-muted-foreground w-full justify-between font-normal shadow-xs hover:bg-white\",\r\n fieldValueDisplayName && \"text-black\"\r\n )}\r\n >\r\n {fieldValueDisplayName\r\n ? fieldValueDisplayName.toString()\r\n : emptyValue}\r\n <ChevronsUpDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\r\n </Button>\r\n </DrawerTrigger>\r\n <DrawerContent>\r\n <div className=\"mt-4 border-t\">\r\n <List {...props} setOpen={setOpen} />\r\n </div>\r\n </DrawerContent>\r\n </Drawer>\r\n );\r\n\r\n return isDesktop ? DesktopContent : MobileContent;\r\n}\r\n\r\nfunction List<T>({\r\n setOpen,\r\n ...props\r\n}: CustomComboboxProps<T> & {\r\n setOpen: (open: boolean) => void;\r\n}) {\r\n const {\r\n uiSchema,\r\n onChange,\r\n value,\r\n list,\r\n selectIdentifier,\r\n selectLabel,\r\n searchPlaceholder,\r\n searchResultLabel,\r\n onValueChange,\r\n badges,\r\n customItemRenderer,\r\n } = props;\r\n const uiOptions = uiSchema?.[\"ui:options\"];\r\n return (\r\n <Command\r\n filter={(value, search) => {\r\n const filterResult = list?.find(\r\n (i) =>\r\n (i[selectIdentifier] as string).toString()?.toLocaleLowerCase() ===\r\n value.toLocaleLowerCase()\r\n )?.[selectLabel] as string;\r\n if (\r\n value.includes(search) ||\r\n filterResult?.toLocaleLowerCase().includes(search.toLocaleLowerCase())\r\n )\r\n return 1;\r\n return 0;\r\n }}\r\n >\r\n <CommandInput\r\n data-testid={`${props.id}_search`}\r\n placeholder={searchPlaceholder || \"Search...\"}\r\n className=\"h-9\"\r\n />\r\n <CommandList className=\"w-full min-w-full max-w-full\">\r\n <CommandEmpty>{searchResultLabel || \"0 search result.\"}</CommandEmpty>\r\n <CommandGroup>\r\n {list?.map((item: T, index) => (\r\n <CommandItem\r\n data-testid={`${props.id}_${index}`}\r\n disabled={props.disabledItems?.includes(item[selectIdentifier])}\r\n onSelect={() => {\r\n onChange(\r\n uiOptions?.allowEmpty !== false\r\n ? item[selectIdentifier] === value\r\n ? undefined\r\n : item[selectIdentifier]\r\n : item[selectIdentifier]\r\n );\r\n if (onValueChange)\r\n onValueChange(\r\n list.find((i) => i[selectIdentifier] === value)\r\n );\r\n setOpen(false);\r\n }}\r\n key={JSON.stringify(item[selectIdentifier])}\r\n value={item[selectIdentifier] as string}\r\n >\r\n {item[selectIdentifier] === value && (\r\n <CheckIcon className={cn(\"mr-2 h-4 w-4\")} />\r\n )}\r\n {customItemRenderer ? (\r\n customItemRenderer(item)\r\n ) : (\r\n <>\r\n {item[selectLabel] as string}\r\n {badges && (\r\n <div className=\"ml-auto\">\r\n {Object.keys(badges).map((badgeKey) => {\r\n const badgeOptions = badges[badgeKey as keyof T];\r\n if (!badgeOptions) return null;\r\n return (\r\n <Badge\r\n key={badgeKey}\r\n variant=\"outline\"\r\n className={cn(\"ml-2\", badgeOptions.className)}\r\n >\r\n {badgeOptions.showValue !== false &&\r\n (item[badgeKey as keyof T] as string)}\r\n {badgeOptions.label && badgeOptions.label}\r\n </Badge>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </>\r\n )}\r\n </CommandItem>\r\n ))}\r\n </CommandGroup>\r\n </CommandList>\r\n </Command>\r\n );\r\n}\r\n\r\nexport function CustomComboboxWidget<T>({\r\n languageData,\r\n selectLabel,\r\n selectIdentifier,\r\n list,\r\n onChange,\r\n disabledItems,\r\n badges,\r\n customItemRenderer,\r\n}: {\r\n languageData: {\r\n \"Select.Placeholder\": string;\r\n \"Select.ResultLabel\": string;\r\n \"Select.EmptyValue\": string;\r\n };\r\n selectIdentifier: keyof T;\r\n selectLabel: keyof T;\r\n list: T[];\r\n onChange?: (value: T | null | undefined) => void;\r\n disabledItems?: T[keyof T][];\r\n badges?: CustomComboboxProps<T>[\"badges\"];\r\n customItemRenderer?: CustomComboboxProps<T>[\"customItemRenderer\"];\r\n}) {\r\n function Widget(props: WidgetProps) {\r\n const { uiSchema } = props;\r\n const uiList = uiSchema?.[\"ui:optionList\"];\r\n return (\r\n <CustomCombobox<T>\r\n {...props}\r\n list={uiList || list}\r\n onChange={(value) => {\r\n props.onChange(value);\r\n if (onChange) {\r\n onChange(list.find((i) => i[selectIdentifier] === value));\r\n }\r\n }}\r\n customItemRenderer={customItemRenderer}\r\n searchPlaceholder={languageData[\"Select.Placeholder\"]}\r\n searchResultLabel={languageData[\"Select.ResultLabel\"]}\r\n emptyValue={languageData[\"Select.EmptyValue\"]}\r\n selectIdentifier={selectIdentifier}\r\n selectLabel={selectLabel}\r\n disabledItems={disabledItems}\r\n badges={badges}\r\n />\r\n );\r\n }\r\n return Widget;\r\n}\r\n"],"mappings":"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","names":["value"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/custom/schema-form/widgets/combobox.tsx"],"sourcesContent":["import { ChevronsUpDown } from \"lucide-react\";\r\nimport { WidgetProps } from \"@rjsf/utils\";\r\nimport { CheckIcon } from \"lucide-react\";\r\nimport { Dispatch, ReactNode, SetStateAction, useState } from \"react\";\r\nimport { Badge } from \"@ayasofyazilim/ui/components/badge\";\r\nimport { Button } from \"@ayasofyazilim/ui/components/button\";\r\nimport {\r\n Command,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandInput,\r\n CommandItem,\r\n CommandList,\r\n} from \"@ayasofyazilim/ui/components/command\";\r\nimport {\r\n Drawer,\r\n DrawerContent,\r\n DrawerTrigger,\r\n} from \"@ayasofyazilim/ui/components/drawer\";\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from \"@ayasofyazilim/ui/components/popover\";\r\nimport { useMediaQuery } from \"@ayasofyazilim/ui/hooks/use-media-query\";\r\nimport { cn } from \"@ayasofyazilim/ui/lib/utils\";\r\n\r\ntype BadgeOptions = { className?: string; showValue?: boolean; label?: string };\r\n\r\ntype CustomComboboxProps<T> = {\r\n emptyValue?: string;\r\n list: Array<T> | null | undefined;\r\n onValueChange?: Dispatch<SetStateAction<T | null | undefined>>;\r\n searchPlaceholder?: string;\r\n searchResultLabel?: string;\r\n selectIdentifier: keyof T;\r\n selectLabel: keyof T;\r\n disabledItems?: T[keyof T][];\r\n badges?: Partial<Record<keyof T, BadgeOptions>>;\r\n customItemRenderer?: (values: T) => ReactNode | undefined | string;\r\n} & WidgetProps;\r\n\r\nexport function CustomCombobox<T>(props: CustomComboboxProps<T>) {\r\n const {\r\n value,\r\n defaultValue,\r\n list,\r\n selectIdentifier,\r\n selectLabel,\r\n disabled,\r\n emptyValue = \"Please select\",\r\n } = props;\r\n const isDesktop = useMediaQuery(\"(min-width: 768px)\");\r\n const [open, setOpen] = useState(false);\r\n const fieldValue = value || defaultValue;\r\n const fieldValueDisplayName = list?.find(\r\n (x) => x[selectIdentifier] === fieldValue,\r\n )?.[selectLabel];\r\n const DesktopContent = (\r\n <Popover open={open} onOpenChange={setOpen} modal>\r\n <PopoverTrigger\r\n asChild\r\n disabled={disabled}\r\n className={cn(disabled && \"cursor-not-allowed\")}\r\n >\r\n <Button\r\n id={props.id}\r\n data-testid={props.id}\r\n type=\"button\"\r\n variant=\"outline\"\r\n role=\"combobox\"\r\n className={cn(\r\n \"text-muted-foreground w-full justify-between font-normal shadow-xs hover:bg-white overflow-hidden\",\r\n fieldValueDisplayName && \"text-foreground\",\r\n disabled &&\r\n \"disabled:pointer-events-auto hover:bg-background hover:text-muted-foreground\",\r\n )}\r\n >\r\n <span className=\"truncate has-[role=dialog]:max-w-xs\">\r\n {typeof fieldValueDisplayName !== \"undefined\" &&\r\n fieldValueDisplayName !== null\r\n ? fieldValueDisplayName.toString()\r\n : emptyValue}\r\n </span>\r\n <ChevronsUpDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"p-0\">\r\n <List {...props} setOpen={setOpen} />\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n\r\n const MobileContent = (\r\n <Drawer open={open} onOpenChange={setOpen}>\r\n <DrawerTrigger asChild>\r\n <Button\r\n data-testid={props.id}\r\n type=\"button\"\r\n disabled={disabled}\r\n variant=\"outline\"\r\n className={cn(\r\n \"text-muted-foreground w-full justify-between font-normal shadow-xs hover:bg-white\",\r\n fieldValueDisplayName && \"text-black\",\r\n )}\r\n >\r\n {fieldValueDisplayName\r\n ? fieldValueDisplayName.toString()\r\n : emptyValue}\r\n <ChevronsUpDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\r\n </Button>\r\n </DrawerTrigger>\r\n <DrawerContent>\r\n <div className=\"mt-4 border-t\">\r\n <List {...props} setOpen={setOpen} />\r\n </div>\r\n </DrawerContent>\r\n </Drawer>\r\n );\r\n\r\n return isDesktop ? DesktopContent : MobileContent;\r\n}\r\n\r\nfunction List<T>({\r\n setOpen,\r\n ...props\r\n}: CustomComboboxProps<T> & {\r\n setOpen: (open: boolean) => void;\r\n}) {\r\n const {\r\n uiSchema,\r\n onChange,\r\n value,\r\n list,\r\n selectIdentifier,\r\n selectLabel,\r\n searchPlaceholder,\r\n searchResultLabel,\r\n onValueChange,\r\n badges,\r\n customItemRenderer,\r\n } = props;\r\n const uiOptions = uiSchema?.[\"ui:options\"];\r\n return (\r\n <Command\r\n filter={(value, search) => {\r\n const filterResult = list?.find(\r\n (i) =>\r\n (i[selectIdentifier] as string).toString()?.toLocaleLowerCase() ===\r\n value.toLocaleLowerCase(),\r\n )?.[selectLabel] as string;\r\n if (\r\n value.includes(search) ||\r\n filterResult?.toLocaleLowerCase().includes(search.toLocaleLowerCase())\r\n )\r\n return 1;\r\n return 0;\r\n }}\r\n >\r\n <CommandInput\r\n data-testid={`${props.id}_search`}\r\n placeholder={searchPlaceholder || \"Search...\"}\r\n className=\"h-9\"\r\n />\r\n <CommandList className=\"w-full min-w-full max-w-full\">\r\n <CommandEmpty>{searchResultLabel || \"0 search result.\"}</CommandEmpty>\r\n <CommandGroup>\r\n {list?.map((item: T, index) => (\r\n <CommandItem\r\n data-testid={`${props.id}_${index}`}\r\n disabled={props.disabledItems?.includes(item[selectIdentifier])}\r\n onSelect={() => {\r\n onChange(\r\n uiOptions?.allowEmpty !== false\r\n ? item[selectIdentifier] === value\r\n ? undefined\r\n : item[selectIdentifier]\r\n : item[selectIdentifier],\r\n );\r\n if (onValueChange)\r\n onValueChange(\r\n list.find((i) => i[selectIdentifier] === value),\r\n );\r\n setOpen(false);\r\n }}\r\n key={JSON.stringify(item[selectIdentifier])}\r\n value={item[selectIdentifier] as string}\r\n >\r\n {item[selectIdentifier] === value && (\r\n <CheckIcon className={cn(\"mr-2 h-4 w-4\")} />\r\n )}\r\n {customItemRenderer ? (\r\n customItemRenderer(item)\r\n ) : (\r\n <>\r\n {item[selectLabel] as string}\r\n {badges && (\r\n <div className=\"ml-auto\">\r\n {Object.keys(badges).map((badgeKey) => {\r\n const badgeOptions = badges[badgeKey as keyof T];\r\n if (!badgeOptions) return null;\r\n return (\r\n <Badge\r\n key={badgeKey}\r\n variant=\"outline\"\r\n className={cn(\"ml-2\", badgeOptions.className)}\r\n >\r\n {badgeOptions.showValue !== false &&\r\n (item[badgeKey as keyof T] as string)}\r\n {badgeOptions.label && badgeOptions.label}\r\n </Badge>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </>\r\n )}\r\n </CommandItem>\r\n ))}\r\n </CommandGroup>\r\n </CommandList>\r\n </Command>\r\n );\r\n}\r\n\r\nexport function CustomComboboxWidget<T>({\r\n languageData,\r\n selectLabel,\r\n selectIdentifier,\r\n list,\r\n onChange,\r\n disabledItems,\r\n badges,\r\n customItemRenderer,\r\n}: {\r\n languageData: {\r\n \"Select.Placeholder\": string;\r\n \"Select.ResultLabel\": string;\r\n \"Select.EmptyValue\": string;\r\n };\r\n selectIdentifier: keyof T;\r\n selectLabel: keyof T;\r\n list: T[];\r\n onChange?: (value: T | null | undefined) => void;\r\n disabledItems?: T[keyof T][];\r\n badges?: CustomComboboxProps<T>[\"badges\"];\r\n customItemRenderer?: CustomComboboxProps<T>[\"customItemRenderer\"];\r\n}) {\r\n function Widget(props: WidgetProps) {\r\n const { uiSchema } = props;\r\n const uiList = uiSchema?.[\"ui:optionList\"];\r\n return (\r\n <CustomCombobox<T>\r\n {...props}\r\n list={uiList || list}\r\n onChange={(value) => {\r\n props.onChange(value);\r\n if (onChange) {\r\n onChange(list.find((i) => i[selectIdentifier] === value));\r\n }\r\n }}\r\n customItemRenderer={customItemRenderer}\r\n searchPlaceholder={languageData[\"Select.Placeholder\"]}\r\n searchResultLabel={languageData[\"Select.ResultLabel\"]}\r\n emptyValue={languageData[\"Select.EmptyValue\"]}\r\n selectIdentifier={selectIdentifier}\r\n selectLabel={selectLabel}\r\n disabledItems={disabledItems}\r\n badges={badges}\r\n />\r\n );\r\n }\r\n return Widget;\r\n}\r\n"],"mappings":"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","names":["value"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { DatePicker } from "@
|
|
2
|
+
import { DatePicker } from "@ayasofyazilim/ui/custom/date-picker";
|
|
3
3
|
const DateWidget = (props) => {
|
|
4
4
|
const { value, onChange, disabled, uiSchema } = props;
|
|
5
5
|
const initialDate = value && !Number.isNaN(new Date(value).getTime()) ? new Date(new Date(value).toJSON()) : void 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/custom/schema-form/widgets/date.tsx"],"sourcesContent":["import { DatePicker } from \"@
|
|
1
|
+
{"version":3,"sources":["../../../../src/custom/schema-form/widgets/date.tsx"],"sourcesContent":["import { DatePicker } from \"@ayasofyazilim/ui/custom/date-picker\";\r\nimport { WidgetProps } from \"@rjsf/utils\";\r\n\r\nexport const DateWidget = (props: WidgetProps) => {\r\n const { value, onChange, disabled, uiSchema } = props;\r\n\r\n const initialDate =\r\n value && !Number.isNaN(new Date(value).getTime())\r\n ? new Date(new Date(value).toJSON())\r\n : undefined;\r\n return (\r\n <DatePicker\r\n id={props.id}\r\n defaultValue={initialDate}\r\n disabled={disabled}\r\n classNames={{\r\n dateInput: \" shadow-xs date-input\",\r\n }}\r\n onChange={(selectedDate) => {\r\n if (selectedDate) {\r\n if (props.schema.format === \"date\") {\r\n onChange(selectedDate.toISOString().split(\"T\").at(0));\r\n } else {\r\n onChange(selectedDate.toISOString());\r\n }\r\n }\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport const DateTimeWidget = (props: WidgetProps) => {\r\n const { value, onChange, disabled, uiSchema } = props;\r\n\r\n const initialDate =\r\n value && !Number.isNaN(new Date(value).getTime())\r\n ? new Date(new Date(value).toJSON())\r\n : undefined;\r\n return (\r\n <DatePicker\r\n id={props.id}\r\n defaultValue={initialDate}\r\n useTime\r\n disabled={disabled}\r\n classNames={{\r\n dateInput: \"shadow-xs date-input\",\r\n }}\r\n onChange={(selectedDate) => {\r\n if (selectedDate) {\r\n if (props.schema.format === \"date\") {\r\n onChange(selectedDate.toISOString().split(\"T\").at(0));\r\n } else {\r\n onChange(selectedDate.toISOString());\r\n }\r\n }\r\n }}\r\n />\r\n );\r\n};\r\n"],"mappings":"AAWI;AAXJ,SAAS,kBAAkB;AAGpB,MAAM,aAAa,CAAC,UAAuB;AAChD,QAAM,EAAE,OAAO,UAAU,UAAU,SAAS,IAAI;AAEhD,QAAM,cACJ,SAAS,CAAC,OAAO,MAAM,IAAI,KAAK,KAAK,EAAE,QAAQ,CAAC,IAC5C,IAAI,KAAK,IAAI,KAAK,KAAK,EAAE,OAAO,CAAC,IACjC;AACN,SACE;AAAA,IAAC;AAAA;AAAA,MACC,IAAI,MAAM;AAAA,MACV,cAAc;AAAA,MACd;AAAA,MACA,YAAY;AAAA,QACV,WAAW;AAAA,MACb;AAAA,MACA,UAAU,CAAC,iBAAiB;AAC1B,YAAI,cAAc;AAChB,cAAI,MAAM,OAAO,WAAW,QAAQ;AAClC,qBAAS,aAAa,YAAY,EAAE,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC;AAAA,UACtD,OAAO;AACL,qBAAS,aAAa,YAAY,CAAC;AAAA,UACrC;AAAA,QACF;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;AAEO,MAAM,iBAAiB,CAAC,UAAuB;AACpD,QAAM,EAAE,OAAO,UAAU,UAAU,SAAS,IAAI;AAEhD,QAAM,cACJ,SAAS,CAAC,OAAO,MAAM,IAAI,KAAK,KAAK,EAAE,QAAQ,CAAC,IAC5C,IAAI,KAAK,IAAI,KAAK,KAAK,EAAE,OAAO,CAAC,IACjC;AACN,SACE;AAAA,IAAC;AAAA;AAAA,MACC,IAAI,MAAM;AAAA,MACV,cAAc;AAAA,MACd,SAAO;AAAA,MACP;AAAA,MACA,YAAY;AAAA,QACV,WAAW;AAAA,MACb;AAAA,MACA,UAAU,CAAC,iBAAiB;AAC1B,YAAI,cAAc;AAChB,cAAI,MAAM,OAAO,WAAW,QAAQ;AAClC,qBAAS,aAAa,YAAY,EAAE,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC;AAAA,UACtD,OAAO;AACL,qBAAS,aAAa,YAAY,CAAC;AAAA,UACrC;AAAA,QACF;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { EmailInput } from "@
|
|
3
|
-
import { cn } from "@
|
|
2
|
+
import { EmailInput } from "@ayasofyazilim/ui/custom/email-input";
|
|
3
|
+
import { cn } from "@ayasofyazilim/ui/lib/utils";
|
|
4
4
|
import { useState } from "react";
|
|
5
5
|
const EmailInputWidget = (props) => {
|
|
6
6
|
const {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/custom/schema-form/widgets/email.tsx"],"sourcesContent":["import { EmailInput } from \"@
|
|
1
|
+
{"version":3,"sources":["../../../../src/custom/schema-form/widgets/email.tsx"],"sourcesContent":["import { EmailInput } from \"@ayasofyazilim/ui/custom/email-input\";\r\nimport { cn } from \"@ayasofyazilim/ui/lib/utils\";\r\nimport { WidgetProps } from \"@rjsf/utils\";\r\nimport { useState } from \"react\";\r\n\r\nexport const EmailInputWidget = (props: WidgetProps) => {\r\n const {\r\n uiSchema,\r\n className,\r\n onChange,\r\n value,\r\n defaultValue,\r\n disabled,\r\n readOnly,\r\n } = props;\r\n\r\n const [email, setEmail] = useState(value || \"\");\r\n return (\r\n <EmailInput\r\n disabled={disabled}\r\n id={props.id}\r\n value={email}\r\n onValueChange={(val) => {\r\n setEmail(val);\r\n onChange(val);\r\n }}\r\n defaultValue={defaultValue}\r\n readOnly={readOnly}\r\n placeholder={props.placeholder || \"Try typing 'john@gmail.com'\"}\r\n className={cn(\"w-full\", className)}\r\n suggestions={uiSchema?.[\"ui:baseList\"] ?? []}\r\n />\r\n );\r\n};\r\n"],"mappings":"AAkBI;AAlBJ,SAAS,kBAAkB;AAC3B,SAAS,UAAU;AAEnB,SAAS,gBAAgB;AAElB,MAAM,mBAAmB,CAAC,UAAuB;AACtD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,SAAS,EAAE;AAC9C,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,IAAI,MAAM;AAAA,MACV,OAAO;AAAA,MACP,eAAe,CAAC,QAAQ;AACtB,iBAAS,GAAG;AACZ,iBAAS,GAAG;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa,MAAM,eAAe;AAAA,MAClC,WAAW,GAAG,UAAU,SAAS;AAAA,MACjC,aAAa,WAAW,aAAa,KAAK,CAAC;AAAA;AAAA,EAC7C;AAEJ;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/custom/schema-form/widgets/password.tsx"],"sourcesContent":["import { WidgetProps } from \"@rjsf/utils\";\r\nimport { PasswordInput } from \"@
|
|
1
|
+
{"version":3,"sources":["../../../../src/custom/schema-form/widgets/password.tsx"],"sourcesContent":["import { WidgetProps } from \"@rjsf/utils\";\r\nimport { PasswordInput } from \"@ayasofyazilim/ui/custom/password-input\";\r\n\r\nexport const PasswordInputWidget = (props: WidgetProps) => {\r\n const {\r\n uiSchema,\r\n id,\r\n className,\r\n onChange,\r\n value,\r\n defaultValue,\r\n disabled,\r\n readOnly,\r\n } = props;\r\n\r\n const required = uiSchema?.[\"ui:required\"] || props.required;\r\n\r\n return (\r\n <PasswordInput\r\n id={id}\r\n data-testid={id}\r\n onBlur={props.onBlur && ((event) => props.onBlur(id, event.target.value))}\r\n className={className}\r\n required={required}\r\n onChange={(event) => {\r\n if (event.target.value === \"\") {\r\n onChange(undefined);\r\n } else {\r\n onChange(event.target.value);\r\n }\r\n }}\r\n defaultValue={value || defaultValue}\r\n readOnly={readOnly}\r\n disabled={disabled}\r\n autoComplete={uiSchema?.[\"ui:autocomplete\"]}\r\n showGenerator={uiSchema?.[\"ui:showGenerator\"]}\r\n passwordLength={uiSchema?.[\"ui:passwordLength\"] || 10}\r\n />\r\n );\r\n};\r\n"],"mappings":"AAkBI;AAjBJ,SAAS,qBAAqB;AAEvB,MAAM,sBAAsB,CAAC,UAAuB;AACzD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,WAAW,WAAW,aAAa,KAAK,MAAM;AAEpD,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,eAAa;AAAA,MACb,QAAQ,MAAM,WAAW,CAAC,UAAU,MAAM,OAAO,IAAI,MAAM,OAAO,KAAK;AAAA,MACvE;AAAA,MACA;AAAA,MACA,UAAU,CAAC,UAAU;AACnB,YAAI,MAAM,OAAO,UAAU,IAAI;AAC7B,mBAAS,MAAS;AAAA,QACpB,OAAO;AACL,mBAAS,MAAM,OAAO,KAAK;AAAA,QAC7B;AAAA,MACF;AAAA,MACA,cAAc,SAAS;AAAA,MACvB;AAAA,MACA;AAAA,MACA,cAAc,WAAW,iBAAiB;AAAA,MAC1C,eAAe,WAAW,kBAAkB;AAAA,MAC5C,gBAAgB,WAAW,mBAAmB,KAAK;AAAA;AAAA,EACrD;AAEJ;","names":[]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
3
|
import {
|
|
4
4
|
PhoneInput
|
|
5
|
-
} from "@
|
|
5
|
+
} from "@ayasofyazilim/ui/custom/phone-input";
|
|
6
6
|
function CustomPhoneFieldWithParse(props) {
|
|
7
7
|
const required = props.required || props.uiSchema?.["ui:required"];
|
|
8
8
|
return /* @__PURE__ */ jsx(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/custom/schema-form/widgets/phone.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {\r\n PhoneInput,\r\n PhoneInputProps,\r\n} from \"@
|
|
1
|
+
{"version":3,"sources":["../../../../src/custom/schema-form/widgets/phone.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {\r\n PhoneInput,\r\n PhoneInputProps,\r\n} from \"@ayasofyazilim/ui/custom/phone-input\";\r\nimport { WidgetProps } from \"@rjsf/utils\";\r\n\r\nexport function CustomPhoneFieldWithParse<T>(\r\n props: Partial<Omit<WidgetProps<T>, \"onChange\" | \"id\">> &\r\n Omit<PhoneInputProps, \"required\" | \"defaultValue\" | \"id\">,\r\n) {\r\n const required = props.required || props.uiSchema?.[\"ui:required\"];\r\n return (\r\n <PhoneInput\r\n {...props}\r\n id={props.id || \"\"}\r\n required={required}\r\n defaultValue={undefined}\r\n />\r\n );\r\n}\r\nexport const PhoneWithParseWidget = CustomPhoneFieldWithParse;\r\n\r\nexport const PhoneWithValueWidget = function CustomPhoneFieldWithValue(\r\n props: WidgetProps & { defaultCountry?: string },\r\n) {\r\n const { onChange, uiSchema } = props;\r\n const required = uiSchema?.[\"ui:required\"] || props.required;\r\n return (\r\n <PhoneInput\r\n {...props}\r\n required={required}\r\n defaultValue={undefined}\r\n onChange={(values) => {\r\n onChange(values.value);\r\n }}\r\n />\r\n );\r\n};\r\n"],"mappings":";AAcI;AAZJ;AAAA,EACE;AAAA,OAEK;AAGA,SAAS,0BACd,OAEA;AACA,QAAM,WAAW,MAAM,YAAY,MAAM,WAAW,aAAa;AACjE,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,IAAI,MAAM,MAAM;AAAA,MAChB;AAAA,MACA,cAAc;AAAA;AAAA,EAChB;AAEJ;AACO,MAAM,uBAAuB;AAE7B,MAAM,uBAAuB,SAAS,0BAC3C,OACA;AACA,QAAM,EAAE,UAAU,SAAS,IAAI;AAC/B,QAAM,WAAW,WAAW,aAAa,KAAK,MAAM;AACpD,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA,cAAc;AAAA,MACd,UAAU,CAAC,WAAW;AACpB,iBAAS,OAAO,KAAK;AAAA,MACvB;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -5,9 +5,9 @@ import {
|
|
|
5
5
|
SelectItem,
|
|
6
6
|
SelectTrigger,
|
|
7
7
|
SelectValue
|
|
8
|
-
} from "@
|
|
9
|
-
import { Selectable } from "@
|
|
10
|
-
import { cn } from "@
|
|
8
|
+
} from "@ayasofyazilim/ui/components/select";
|
|
9
|
+
import { Selectable } from "@ayasofyazilim/ui/custom/selectable";
|
|
10
|
+
import { cn } from "@ayasofyazilim/ui/lib/utils";
|
|
11
11
|
function SelectWidget({
|
|
12
12
|
id,
|
|
13
13
|
options,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/custom/schema-form/widgets/select.tsx"],"sourcesContent":["import {\r\n FormContextType,\r\n RJSFSchema,\r\n StrictRJSFSchema,\r\n WidgetProps,\r\n} from \"@rjsf/utils\";\r\n\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue,\r\n} from \"@
|
|
1
|
+
{"version":3,"sources":["../../../../src/custom/schema-form/widgets/select.tsx"],"sourcesContent":["import {\r\n FormContextType,\r\n RJSFSchema,\r\n StrictRJSFSchema,\r\n WidgetProps,\r\n} from \"@rjsf/utils\";\r\n\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue,\r\n} from \"@ayasofyazilim/ui/components/select\";\r\nimport { Selectable } from \"@ayasofyazilim/ui/custom/selectable\";\r\nimport { cn } from \"@ayasofyazilim/ui/lib/utils\";\r\n\r\n/** The `SelectWidget` is a widget for rendering dropdowns.\r\n * It is typically used with string properties constrained with enum options.\r\n *\r\n * @param props - The `WidgetProps` for this component\r\n */\r\n\r\ninterface EnumOption {\r\n value: string;\r\n label: string;\r\n // Add other properties if your options have them (e.g., key, rawData)\r\n}\r\n\r\n// 2. Define the shape of the transformed item (optional, but good for clarity)\r\ninterface MappedItem {\r\n value: string;\r\n label: string;\r\n disabled: boolean;\r\n}\r\n\r\nexport function SelectWidget<\r\n T = any,\r\n S extends StrictRJSFSchema = RJSFSchema,\r\n F extends FormContextType = any,\r\n>({\r\n id,\r\n options,\r\n required,\r\n disabled,\r\n value,\r\n multiple,\r\n onChange,\r\n rawErrors = [],\r\n className,\r\n}: WidgetProps<T, S, F>) {\r\n const { enumOptions, enumDisabled, emptyValue: optEmptyValue } = options;\r\n const items: MappedItem[] = (enumOptions as EnumOption[])?.map(\r\n ({ value, label }: EnumOption) => {\r\n return {\r\n value,\r\n label,\r\n disabled: Array.isArray(enumDisabled) && enumDisabled.includes(value),\r\n };\r\n },\r\n );\r\n const cnClassName = cn(\r\n \"w-full\",\r\n { \"border-destructive\": rawErrors.length > 0 },\r\n className,\r\n );\r\n return !multiple ? (\r\n <Select\r\n required={required}\r\n value={value}\r\n onValueChange={(val) => {\r\n onChange(val);\r\n }}\r\n >\r\n <SelectTrigger className={cnClassName} id={id}>\r\n <SelectValue placeholder={optEmptyValue} />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {items.map((item) => {\r\n return (\r\n <SelectItem\r\n disabled={item.disabled}\r\n key={item.value}\r\n value={item.value}\r\n >\r\n {item.label}\r\n </SelectItem>\r\n );\r\n })}\r\n </SelectContent>\r\n </Select>\r\n ) : (\r\n <Selectable<MappedItem>\r\n id={id}\r\n getKey={(opt) => opt.value}\r\n getLabel={(opt) => opt.label}\r\n options={items}\r\n onChange={(val) => {\r\n onChange(val.map((item) => item.value));\r\n }}\r\n disabled={disabled}\r\n makeAChoiceText={optEmptyValue}\r\n />\r\n );\r\n}\r\n"],"mappings":"AAmEI,SAQI,KARJ;AA5DJ;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,kBAAkB;AAC3B,SAAS,UAAU;AAqBZ,SAAS,aAId;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY,CAAC;AAAA,EACb;AACF,GAAyB;AACvB,QAAM,EAAE,aAAa,cAAc,YAAY,cAAc,IAAI;AACjE,QAAM,QAAuB,aAA8B;AAAA,IACzD,CAAC,EAAE,OAAAA,QAAO,MAAM,MAAkB;AAChC,aAAO;AAAA,QACL,OAAAA;AAAA,QACA;AAAA,QACA,UAAU,MAAM,QAAQ,YAAY,KAAK,aAAa,SAASA,MAAK;AAAA,MACtE;AAAA,IACF;AAAA,EACF;AACA,QAAM,cAAc;AAAA,IAClB;AAAA,IACA,EAAE,sBAAsB,UAAU,SAAS,EAAE;AAAA,IAC7C;AAAA,EACF;AACA,SAAO,CAAC,WACN;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,eAAe,CAAC,QAAQ;AACtB,iBAAS,GAAG;AAAA,MACd;AAAA,MAEA;AAAA,4BAAC,iBAAc,WAAW,aAAa,IACrC,8BAAC,eAAY,aAAa,eAAe,GAC3C;AAAA,QACA,oBAAC,iBACE,gBAAM,IAAI,CAAC,SAAS;AACnB,iBACE;AAAA,YAAC;AAAA;AAAA,cACC,UAAU,KAAK;AAAA,cAEf,OAAO,KAAK;AAAA,cAEX,eAAK;AAAA;AAAA,YAHD,KAAK;AAAA,UAIZ;AAAA,QAEJ,CAAC,GACH;AAAA;AAAA;AAAA,EACF,IAEA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,QAAQ,CAAC,QAAQ,IAAI;AAAA,MACrB,UAAU,CAAC,QAAQ,IAAI;AAAA,MACvB,SAAS;AAAA,MACT,UAAU,CAAC,QAAQ;AACjB,iBAAS,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC;AAAA,MACxC;AAAA,MACA;AAAA,MACA,iBAAiB;AAAA;AAAA,EACnB;AAEJ;","names":["value"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import {
|
|
3
3
|
Selectable
|
|
4
|
-
} from "@
|
|
4
|
+
} from "@ayasofyazilim/ui/custom/selectable";
|
|
5
5
|
function CustomSelectableWidget(selectableProps) {
|
|
6
6
|
const { getKey } = selectableProps;
|
|
7
7
|
function Widget(widgetProps) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/custom/schema-form/widgets/selectable.tsx"],"sourcesContent":["import {\r\n Selectable,\r\n SelectableProps,\r\n} from \"@
|
|
1
|
+
{"version":3,"sources":["../../../../src/custom/schema-form/widgets/selectable.tsx"],"sourcesContent":["import {\r\n Selectable,\r\n SelectableProps,\r\n} from \"@ayasofyazilim/ui/custom/selectable\";\r\nimport { WidgetProps } from \"@rjsf/utils\";\r\n\r\nexport function CustomSelectableWidget<T>(\r\n selectableProps: Omit<SelectableProps<T>, \"onChange\">,\r\n) {\r\n const { getKey } = selectableProps;\r\n\r\n function Widget(widgetProps: Omit<WidgetProps, \"options\">) {\r\n const handleChange = (values: T[]) => {\r\n widgetProps.onChange(values.map((item) => getKey(item)));\r\n };\r\n return (\r\n <Selectable<T>\r\n {...widgetProps}\r\n {...selectableProps}\r\n onChange={handleChange}\r\n />\r\n );\r\n }\r\n return Widget;\r\n}\r\n"],"mappings":"AAgBM;AAhBN;AAAA,EACE;AAAA,OAEK;AAGA,SAAS,uBACd,iBACA;AACA,QAAM,EAAE,OAAO,IAAI;AAEnB,WAAS,OAAO,aAA2C;AACzD,UAAM,eAAe,CAAC,WAAgB;AACpC,kBAAY,SAAS,OAAO,IAAI,CAAC,SAAS,OAAO,IAAI,CAAC,CAAC;AAAA,IACzD;AACA,WACE;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACH,GAAG;AAAA,QACJ,UAAU;AAAA;AAAA,IACZ;AAAA,EAEJ;AACA,SAAO;AACT;","names":[]}
|
|
@@ -5,13 +5,13 @@ import {
|
|
|
5
5
|
InputGroupButton,
|
|
6
6
|
InputGroupInput,
|
|
7
7
|
InputGroupText
|
|
8
|
-
} from "@
|
|
8
|
+
} from "@ayasofyazilim/ui/components/input-group";
|
|
9
9
|
import {
|
|
10
10
|
Tooltip,
|
|
11
11
|
TooltipContent,
|
|
12
12
|
TooltipTrigger
|
|
13
|
-
} from "@
|
|
14
|
-
import { cn } from "@
|
|
13
|
+
} from "@ayasofyazilim/ui/components/tooltip";
|
|
14
|
+
import { cn } from "@ayasofyazilim/ui/lib/utils";
|
|
15
15
|
import { PlusIcon, Trash2Icon } from "lucide-react";
|
|
16
16
|
import { useCallback, useState } from "react";
|
|
17
17
|
function CustomStringArrayWidget(config = {}) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/custom/schema-form/widgets/string-array.tsx"],"sourcesContent":["import { ButtonProps } from \"@repo/ayasofyazilim-ui/components/button\";\r\nimport {\r\n InputGroup,\r\n InputGroupAddon,\r\n InputGroupButton,\r\n InputGroupInput,\r\n InputGroupText,\r\n} from \"@repo/ayasofyazilim-ui/components/input-group\";\r\nimport {\r\n Tooltip,\r\n TooltipContent,\r\n TooltipTrigger,\r\n} from \"@repo/ayasofyazilim-ui/components/tooltip\";\r\nimport { cn } from \"@repo/ayasofyazilim-ui/lib/utils\";\r\nimport { WidgetProps } from \"@rjsf/utils\";\r\nimport { PlusIcon, Trash2Icon } from \"lucide-react\";\r\nimport { useCallback, useState } from \"react\";\r\n\r\ninterface StringArrayWidgetConfig {\r\n classNames?: {\r\n container?: string;\r\n listContainer?: string;\r\n listItem?: string;\r\n listItemText?: string;\r\n removeButton?: string;\r\n inputContainer?: string;\r\n input?: string;\r\n addButton?: string;\r\n };\r\n icons?: {\r\n add?: React.ComponentType<{ className?: string }>;\r\n remove?: React.ComponentType<{ className?: string }>;\r\n };\r\n iconSizes?: {\r\n add?: string;\r\n remove?: string;\r\n };\r\n buttonVariants?: {\r\n add?: ButtonProps[\"variant\"];\r\n remove?: ButtonProps[\"variant\"];\r\n };\r\n buttonSizes?: {\r\n add?: \"icon-xs\" | \"sm\" | \"icon-sm\" | \"xs\";\r\n remove?: \"icon-xs\" | \"sm\" | \"icon-sm\" | \"xs\";\r\n };\r\n maxItems?: number;\r\n maxHeight?: string;\r\n allowDuplicates?: boolean;\r\n trimValues?: boolean;\r\n validateValue?: (value: string) => boolean | string;\r\n transformValue?: (value: string) => string;\r\n renderItem?: (\r\n value: string,\r\n index: number,\r\n onRemove: () => void\r\n ) => React.ReactNode;\r\n emptyState?: React.ReactNode;\r\n placeholder?: string;\r\n addButtonLabel?: string;\r\n removeButtonLabel?: string;\r\n errorMessages?: {\r\n duplicate?: string;\r\n invalid?: string;\r\n maxItems?: (max: number) => string;\r\n };\r\n messages?: {\r\n maxReached?: (max: number) => string;\r\n };\r\n inputProps?: React.InputHTMLAttributes<HTMLInputElement>;\r\n onAdd?: (value: string) => void;\r\n onRemove?: (value: string, index: number) => void;\r\n disabled?: boolean;\r\n}\r\n\r\nexport function CustomStringArrayWidget(config: StringArrayWidgetConfig = {}) {\r\n const {\r\n classNames = {},\r\n icons = {},\r\n iconSizes = { add: \"icon-xs\", remove: \"icon-xs\" },\r\n buttonVariants = { add: \"default\", remove: \"secondary\" },\r\n buttonSizes = { add: \"icon-xs\", remove: undefined },\r\n maxItems,\r\n maxHeight = \"max-h-52\",\r\n allowDuplicates = false,\r\n trimValues = true,\r\n validateValue,\r\n transformValue,\r\n renderItem,\r\n emptyState,\r\n placeholder,\r\n addButtonLabel,\r\n removeButtonLabel,\r\n errorMessages = {},\r\n messages = {},\r\n inputProps = {},\r\n onAdd,\r\n onRemove,\r\n disabled = false,\r\n } = config;\r\n\r\n const AddIcon = icons.add || PlusIcon;\r\n const RemoveIcon = icons.remove || Trash2Icon;\r\n\r\n const Widget = (props: WidgetProps) => {\r\n const [inputValue, setInputValue] = useState(\"\");\r\n const [error, setError] = useState<string>(\"\");\r\n\r\n const currentValues = props.value || [];\r\n\r\n const handleValue = useCallback(\r\n (value: string) => {\r\n const processedValue = trimValues ? value.trim() : value;\r\n\r\n if (!processedValue) {\r\n return;\r\n }\r\n const finalValue = transformValue\r\n ? transformValue(processedValue)\r\n : processedValue;\r\n if (!allowDuplicates && currentValues.includes(finalValue)) {\r\n if (errorMessages.duplicate) {\r\n setError(errorMessages.duplicate);\r\n }\r\n return;\r\n }\r\n if (validateValue) {\r\n const validationResult = validateValue(finalValue);\r\n if (validationResult === false) {\r\n if (errorMessages.invalid) {\r\n setError(errorMessages.invalid);\r\n }\r\n return;\r\n }\r\n if (typeof validationResult === \"string\") {\r\n setError(validationResult);\r\n return;\r\n }\r\n }\r\n if (maxItems && currentValues.length >= maxItems) {\r\n if (errorMessages.maxItems) {\r\n setError(errorMessages.maxItems(maxItems));\r\n }\r\n return;\r\n }\r\n setError(\"\");\r\n props.onChange([...currentValues, finalValue]);\r\n setInputValue(\"\");\r\n if (onAdd) {\r\n onAdd(finalValue);\r\n }\r\n },\r\n [currentValues, props]\r\n );\r\n\r\n const handleRemove = useCallback(\r\n (index: number) => {\r\n const valueToRemove = currentValues[index];\r\n const newValues = currentValues.filter(\r\n (_: string, i: number) => i !== index\r\n );\r\n props.onChange(newValues);\r\n if (onRemove) {\r\n onRemove(valueToRemove, index);\r\n }\r\n },\r\n [currentValues, props, onRemove]\r\n );\r\n\r\n const isDisabled = disabled || props.disabled;\r\n const isMaxReached = !!(maxItems && currentValues.length >= maxItems);\r\n\r\n return (\r\n <InputGroup\r\n className={cn(\r\n \"p-1.5\",\r\n currentValues.length === 0 && \"p-0\",\r\n classNames.container\r\n )}\r\n >\r\n <InputGroupAddon\r\n align=\"block-end\"\r\n className={cn(\r\n \"flex-col gap-1.5\",\r\n maxHeight,\r\n \"overflow-auto p-0\",\r\n classNames.listContainer || \"\"\r\n )}\r\n >\r\n {currentValues.length === 0 && emptyState\r\n ? emptyState\r\n : currentValues.map((value: string, index: number) => {\r\n if (renderItem) {\r\n return renderItem(value, index, () => handleRemove(index));\r\n }\r\n\r\n return (\r\n <InputGroupText\r\n className={cn(\r\n \"bg-accent relative w-full overflow-hidden pl-2 pr-1 min-h-8 h-8 rounded-md\",\r\n classNames.listItem || \"\"\r\n )}\r\n key={`${value}-${index}`}\r\n >\r\n <span\r\n className={cn(\r\n \"truncate text-ellipsis\",\r\n classNames.listItemText || \"\"\r\n )}\r\n >\r\n {value}\r\n </span>\r\n <InputGroupButton\r\n className={cn(\r\n \"rounded-md ml-auto\",\r\n classNames.removeButton || \"\"\r\n )}\r\n variant={buttonVariants.remove}\r\n size={buttonSizes.remove}\r\n onClick={() => handleRemove(index)}\r\n disabled={isDisabled}\r\n aria-label={removeButtonLabel}\r\n >\r\n <RemoveIcon className={iconSizes.remove} />\r\n </InputGroupButton>\r\n </InputGroupText>\r\n );\r\n })}\r\n </InputGroupAddon>\r\n <InputGroupAddon\r\n align=\"block-end\"\r\n className={cn(\r\n \"p-0 justify-between\",\r\n currentValues.length === 0 && \"pr-1.5 \",\r\n classNames.inputContainer || \"\"\r\n )}\r\n >\r\n <Tooltip open={!!error}>\r\n <TooltipTrigger asChild>\r\n <div>\r\n <InputGroupInput\r\n className={cn(\r\n \"pl-2\",\r\n error && \"text-destructive\",\r\n classNames.input || \"\"\r\n )}\r\n placeholder={placeholder || props.options.placeholder}\r\n value={inputValue}\r\n onChange={(e) => {\r\n setInputValue(e.target.value);\r\n setError(\"\");\r\n }}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\") {\r\n e.preventDefault();\r\n handleValue(inputValue);\r\n }\r\n }}\r\n {...inputProps}\r\n />\r\n </div>\r\n </TooltipTrigger>\r\n {error && <TooltipContent>{error}</TooltipContent>}\r\n </Tooltip>\r\n <Tooltip>\r\n <TooltipTrigger asChild>\r\n <div>\r\n <InputGroupButton\r\n type=\"button\"\r\n variant={buttonVariants.add}\r\n className={cn(\r\n \"rounded-md ml-auto\",\r\n classNames.addButton || \"\"\r\n )}\r\n size={buttonSizes.add}\r\n onClick={() => handleValue(inputValue)}\r\n disabled={isDisabled || isMaxReached || !inputValue}\r\n aria-label={addButtonLabel}\r\n >\r\n <AddIcon className={iconSizes.add} />\r\n <span className=\"sr-only\">{addButtonLabel}</span>\r\n </InputGroupButton>\r\n </div>\r\n </TooltipTrigger>\r\n {isMaxReached && messages.maxReached && (\r\n <TooltipContent side=\"bottom\">\r\n {messages.maxReached(maxItems!)}\r\n </TooltipContent>\r\n )}\r\n </Tooltip>\r\n </InputGroupAddon>\r\n </InputGroup>\r\n );\r\n };\r\n\r\n return Widget;\r\n}\r\n"],"mappings":"AAoMkB,SAOE,KAPF;AAnMlB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,UAAU;AAEnB,SAAS,UAAU,kBAAkB;AACrC,SAAS,aAAa,gBAAgB;AA0D/B,SAAS,wBAAwB,SAAkC,CAAC,GAAG;AAC5E,QAAM;AAAA,IACJ,aAAa,CAAC;AAAA,IACd,QAAQ,CAAC;AAAA,IACT,YAAY,EAAE,KAAK,WAAW,QAAQ,UAAU;AAAA,IAChD,iBAAiB,EAAE,KAAK,WAAW,QAAQ,YAAY;AAAA,IACvD,cAAc,EAAE,KAAK,WAAW,QAAQ,OAAU;AAAA,IAClD;AAAA,IACA,YAAY;AAAA,IACZ,kBAAkB;AAAA,IAClB,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,gBAAgB,CAAC;AAAA,IACjB,WAAW,CAAC;AAAA,IACZ,aAAa,CAAC;AAAA,IACd;AAAA,IACA;AAAA,IACA,WAAW;AAAA,EACb,IAAI;AAEJ,QAAM,UAAU,MAAM,OAAO;AAC7B,QAAM,aAAa,MAAM,UAAU;AAEnC,QAAM,SAAS,CAAC,UAAuB;AACrC,UAAM,CAAC,YAAY,aAAa,IAAI,SAAS,EAAE;AAC/C,UAAM,CAAC,OAAO,QAAQ,IAAI,SAAiB,EAAE;AAE7C,UAAM,gBAAgB,MAAM,SAAS,CAAC;AAEtC,UAAM,cAAc;AAAA,MAClB,CAAC,UAAkB;AACjB,cAAM,iBAAiB,aAAa,MAAM,KAAK,IAAI;AAEnD,YAAI,CAAC,gBAAgB;AACnB;AAAA,QACF;AACA,cAAM,aAAa,iBACf,eAAe,cAAc,IAC7B;AACJ,YAAI,CAAC,mBAAmB,cAAc,SAAS,UAAU,GAAG;AAC1D,cAAI,cAAc,WAAW;AAC3B,qBAAS,cAAc,SAAS;AAAA,UAClC;AACA;AAAA,QACF;AACA,YAAI,eAAe;AACjB,gBAAM,mBAAmB,cAAc,UAAU;AACjD,cAAI,qBAAqB,OAAO;AAC9B,gBAAI,cAAc,SAAS;AACzB,uBAAS,cAAc,OAAO;AAAA,YAChC;AACA;AAAA,UACF;AACA,cAAI,OAAO,qBAAqB,UAAU;AACxC,qBAAS,gBAAgB;AACzB;AAAA,UACF;AAAA,QACF;AACA,YAAI,YAAY,cAAc,UAAU,UAAU;AAChD,cAAI,cAAc,UAAU;AAC1B,qBAAS,cAAc,SAAS,QAAQ,CAAC;AAAA,UAC3C;AACA;AAAA,QACF;AACA,iBAAS,EAAE;AACX,cAAM,SAAS,CAAC,GAAG,eAAe,UAAU,CAAC;AAC7C,sBAAc,EAAE;AAChB,YAAI,OAAO;AACT,gBAAM,UAAU;AAAA,QAClB;AAAA,MACF;AAAA,MACA,CAAC,eAAe,KAAK;AAAA,IACvB;AAEA,UAAM,eAAe;AAAA,MACnB,CAAC,UAAkB;AACjB,cAAM,gBAAgB,cAAc,KAAK;AACzC,cAAM,YAAY,cAAc;AAAA,UAC9B,CAAC,GAAW,MAAc,MAAM;AAAA,QAClC;AACA,cAAM,SAAS,SAAS;AACxB,YAAI,UAAU;AACZ,mBAAS,eAAe,KAAK;AAAA,QAC/B;AAAA,MACF;AAAA,MACA,CAAC,eAAe,OAAO,QAAQ;AAAA,IACjC;AAEA,UAAM,aAAa,YAAY,MAAM;AACrC,UAAM,eAAe,CAAC,EAAE,YAAY,cAAc,UAAU;AAE5D,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,cAAc,WAAW,KAAK;AAAA,UAC9B,WAAW;AAAA,QACb;AAAA,QAEA;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAM;AAAA,cACN,WAAW;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,WAAW,iBAAiB;AAAA,cAC9B;AAAA,cAEC,wBAAc,WAAW,KAAK,aAC3B,aACA,cAAc,IAAI,CAAC,OAAe,UAAkB;AAClD,oBAAI,YAAY;AACd,yBAAO,WAAW,OAAO,OAAO,MAAM,aAAa,KAAK,CAAC;AAAA,gBAC3D;AAEA,uBACE;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAW;AAAA,sBACT;AAAA,sBACA,WAAW,YAAY;AAAA,oBACzB;AAAA,oBAGA;AAAA;AAAA,wBAAC;AAAA;AAAA,0BACC,WAAW;AAAA,4BACT;AAAA,4BACA,WAAW,gBAAgB;AAAA,0BAC7B;AAAA,0BAEC;AAAA;AAAA,sBACH;AAAA,sBACA;AAAA,wBAAC;AAAA;AAAA,0BACC,WAAW;AAAA,4BACT;AAAA,4BACA,WAAW,gBAAgB;AAAA,0BAC7B;AAAA,0BACA,SAAS,eAAe;AAAA,0BACxB,MAAM,YAAY;AAAA,0BAClB,SAAS,MAAM,aAAa,KAAK;AAAA,0BACjC,UAAU;AAAA,0BACV,cAAY;AAAA,0BAEZ,8BAAC,cAAW,WAAW,UAAU,QAAQ;AAAA;AAAA,sBAC3C;AAAA;AAAA;AAAA,kBAtBK,GAAG,KAAK,IAAI,KAAK;AAAA,gBAuBxB;AAAA,cAEJ,CAAC;AAAA;AAAA,UACP;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,OAAM;AAAA,cACN,WAAW;AAAA,gBACT;AAAA,gBACA,cAAc,WAAW,KAAK;AAAA,gBAC9B,WAAW,kBAAkB;AAAA,cAC/B;AAAA,cAEA;AAAA,qCAAC,WAAQ,MAAM,CAAC,CAAC,OACf;AAAA,sCAAC,kBAAe,SAAO,MACrB,8BAAC,SACC;AAAA,oBAAC;AAAA;AAAA,sBACC,WAAW;AAAA,wBACT;AAAA,wBACA,SAAS;AAAA,wBACT,WAAW,SAAS;AAAA,sBACtB;AAAA,sBACA,aAAa,eAAe,MAAM,QAAQ;AAAA,sBAC1C,OAAO;AAAA,sBACP,UAAU,CAAC,MAAM;AACf,sCAAc,EAAE,OAAO,KAAK;AAC5B,iCAAS,EAAE;AAAA,sBACb;AAAA,sBACA,WAAW,CAAC,MAAM;AAChB,4BAAI,EAAE,QAAQ,SAAS;AACrB,4BAAE,eAAe;AACjB,sCAAY,UAAU;AAAA,wBACxB;AAAA,sBACF;AAAA,sBACC,GAAG;AAAA;AAAA,kBACN,GACF,GACF;AAAA,kBACC,SAAS,oBAAC,kBAAgB,iBAAM;AAAA,mBACnC;AAAA,gBACA,qBAAC,WACC;AAAA,sCAAC,kBAAe,SAAO,MACrB,8BAAC,SACC;AAAA,oBAAC;AAAA;AAAA,sBACC,MAAK;AAAA,sBACL,SAAS,eAAe;AAAA,sBACxB,WAAW;AAAA,wBACT;AAAA,wBACA,WAAW,aAAa;AAAA,sBAC1B;AAAA,sBACA,MAAM,YAAY;AAAA,sBAClB,SAAS,MAAM,YAAY,UAAU;AAAA,sBACrC,UAAU,cAAc,gBAAgB,CAAC;AAAA,sBACzC,cAAY;AAAA,sBAEZ;AAAA,4CAAC,WAAQ,WAAW,UAAU,KAAK;AAAA,wBACnC,oBAAC,UAAK,WAAU,WAAW,0BAAe;AAAA;AAAA;AAAA,kBAC5C,GACF,GACF;AAAA,kBACC,gBAAgB,SAAS,cACxB,oBAAC,kBAAe,MAAK,UAClB,mBAAS,WAAW,QAAS,GAChC;AAAA,mBAEJ;AAAA;AAAA;AAAA,UACF;AAAA;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,SAAO;AACT;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/custom/schema-form/widgets/string-array.tsx"],"sourcesContent":["import { ButtonProps } from \"@ayasofyazilim/ui/components/button\";\r\nimport {\r\n InputGroup,\r\n InputGroupAddon,\r\n InputGroupButton,\r\n InputGroupInput,\r\n InputGroupText,\r\n} from \"@ayasofyazilim/ui/components/input-group\";\r\nimport {\r\n Tooltip,\r\n TooltipContent,\r\n TooltipTrigger,\r\n} from \"@ayasofyazilim/ui/components/tooltip\";\r\nimport { cn } from \"@ayasofyazilim/ui/lib/utils\";\r\nimport { WidgetProps } from \"@rjsf/utils\";\r\nimport { PlusIcon, Trash2Icon } from \"lucide-react\";\r\nimport { useCallback, useState } from \"react\";\r\n\r\ninterface StringArrayWidgetConfig {\r\n classNames?: {\r\n container?: string;\r\n listContainer?: string;\r\n listItem?: string;\r\n listItemText?: string;\r\n removeButton?: string;\r\n inputContainer?: string;\r\n input?: string;\r\n addButton?: string;\r\n };\r\n icons?: {\r\n add?: React.ComponentType<{ className?: string }>;\r\n remove?: React.ComponentType<{ className?: string }>;\r\n };\r\n iconSizes?: {\r\n add?: string;\r\n remove?: string;\r\n };\r\n buttonVariants?: {\r\n add?: ButtonProps[\"variant\"];\r\n remove?: ButtonProps[\"variant\"];\r\n };\r\n buttonSizes?: {\r\n add?: \"icon-xs\" | \"sm\" | \"icon-sm\" | \"xs\";\r\n remove?: \"icon-xs\" | \"sm\" | \"icon-sm\" | \"xs\";\r\n };\r\n maxItems?: number;\r\n maxHeight?: string;\r\n allowDuplicates?: boolean;\r\n trimValues?: boolean;\r\n validateValue?: (value: string) => boolean | string;\r\n transformValue?: (value: string) => string;\r\n renderItem?: (\r\n value: string,\r\n index: number,\r\n onRemove: () => void,\r\n ) => React.ReactNode;\r\n emptyState?: React.ReactNode;\r\n placeholder?: string;\r\n addButtonLabel?: string;\r\n removeButtonLabel?: string;\r\n errorMessages?: {\r\n duplicate?: string;\r\n invalid?: string;\r\n maxItems?: (max: number) => string;\r\n };\r\n messages?: {\r\n maxReached?: (max: number) => string;\r\n };\r\n inputProps?: React.InputHTMLAttributes<HTMLInputElement>;\r\n onAdd?: (value: string) => void;\r\n onRemove?: (value: string, index: number) => void;\r\n disabled?: boolean;\r\n}\r\n\r\nexport function CustomStringArrayWidget(config: StringArrayWidgetConfig = {}) {\r\n const {\r\n classNames = {},\r\n icons = {},\r\n iconSizes = { add: \"icon-xs\", remove: \"icon-xs\" },\r\n buttonVariants = { add: \"default\", remove: \"secondary\" },\r\n buttonSizes = { add: \"icon-xs\", remove: undefined },\r\n maxItems,\r\n maxHeight = \"max-h-52\",\r\n allowDuplicates = false,\r\n trimValues = true,\r\n validateValue,\r\n transformValue,\r\n renderItem,\r\n emptyState,\r\n placeholder,\r\n addButtonLabel,\r\n removeButtonLabel,\r\n errorMessages = {},\r\n messages = {},\r\n inputProps = {},\r\n onAdd,\r\n onRemove,\r\n disabled = false,\r\n } = config;\r\n\r\n const AddIcon = icons.add || PlusIcon;\r\n const RemoveIcon = icons.remove || Trash2Icon;\r\n\r\n const Widget = (props: WidgetProps) => {\r\n const [inputValue, setInputValue] = useState(\"\");\r\n const [error, setError] = useState<string>(\"\");\r\n\r\n const currentValues = props.value || [];\r\n\r\n const handleValue = useCallback(\r\n (value: string) => {\r\n const processedValue = trimValues ? value.trim() : value;\r\n\r\n if (!processedValue) {\r\n return;\r\n }\r\n const finalValue = transformValue\r\n ? transformValue(processedValue)\r\n : processedValue;\r\n if (!allowDuplicates && currentValues.includes(finalValue)) {\r\n if (errorMessages.duplicate) {\r\n setError(errorMessages.duplicate);\r\n }\r\n return;\r\n }\r\n if (validateValue) {\r\n const validationResult = validateValue(finalValue);\r\n if (validationResult === false) {\r\n if (errorMessages.invalid) {\r\n setError(errorMessages.invalid);\r\n }\r\n return;\r\n }\r\n if (typeof validationResult === \"string\") {\r\n setError(validationResult);\r\n return;\r\n }\r\n }\r\n if (maxItems && currentValues.length >= maxItems) {\r\n if (errorMessages.maxItems) {\r\n setError(errorMessages.maxItems(maxItems));\r\n }\r\n return;\r\n }\r\n setError(\"\");\r\n props.onChange([...currentValues, finalValue]);\r\n setInputValue(\"\");\r\n if (onAdd) {\r\n onAdd(finalValue);\r\n }\r\n },\r\n [currentValues, props],\r\n );\r\n\r\n const handleRemove = useCallback(\r\n (index: number) => {\r\n const valueToRemove = currentValues[index];\r\n const newValues = currentValues.filter(\r\n (_: string, i: number) => i !== index,\r\n );\r\n props.onChange(newValues);\r\n if (onRemove) {\r\n onRemove(valueToRemove, index);\r\n }\r\n },\r\n [currentValues, props, onRemove],\r\n );\r\n\r\n const isDisabled = disabled || props.disabled;\r\n const isMaxReached = !!(maxItems && currentValues.length >= maxItems);\r\n\r\n return (\r\n <InputGroup\r\n className={cn(\r\n \"p-1.5\",\r\n currentValues.length === 0 && \"p-0\",\r\n classNames.container,\r\n )}\r\n >\r\n <InputGroupAddon\r\n align=\"block-end\"\r\n className={cn(\r\n \"flex-col gap-1.5\",\r\n maxHeight,\r\n \"overflow-auto p-0\",\r\n classNames.listContainer || \"\",\r\n )}\r\n >\r\n {currentValues.length === 0 && emptyState\r\n ? emptyState\r\n : currentValues.map((value: string, index: number) => {\r\n if (renderItem) {\r\n return renderItem(value, index, () => handleRemove(index));\r\n }\r\n\r\n return (\r\n <InputGroupText\r\n className={cn(\r\n \"bg-accent relative w-full overflow-hidden pl-2 pr-1 min-h-8 h-8 rounded-md\",\r\n classNames.listItem || \"\",\r\n )}\r\n key={`${value}-${index}`}\r\n >\r\n <span\r\n className={cn(\r\n \"truncate text-ellipsis\",\r\n classNames.listItemText || \"\",\r\n )}\r\n >\r\n {value}\r\n </span>\r\n <InputGroupButton\r\n className={cn(\r\n \"rounded-md ml-auto\",\r\n classNames.removeButton || \"\",\r\n )}\r\n variant={buttonVariants.remove}\r\n size={buttonSizes.remove}\r\n onClick={() => handleRemove(index)}\r\n disabled={isDisabled}\r\n aria-label={removeButtonLabel}\r\n >\r\n <RemoveIcon className={iconSizes.remove} />\r\n </InputGroupButton>\r\n </InputGroupText>\r\n );\r\n })}\r\n </InputGroupAddon>\r\n <InputGroupAddon\r\n align=\"block-end\"\r\n className={cn(\r\n \"p-0 justify-between\",\r\n currentValues.length === 0 && \"pr-1.5 \",\r\n classNames.inputContainer || \"\",\r\n )}\r\n >\r\n <Tooltip open={!!error}>\r\n <TooltipTrigger asChild>\r\n <div>\r\n <InputGroupInput\r\n className={cn(\r\n \"pl-2\",\r\n error && \"text-destructive\",\r\n classNames.input || \"\",\r\n )}\r\n placeholder={placeholder || props.options.placeholder}\r\n value={inputValue}\r\n onChange={(e) => {\r\n setInputValue(e.target.value);\r\n setError(\"\");\r\n }}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\") {\r\n e.preventDefault();\r\n handleValue(inputValue);\r\n }\r\n }}\r\n {...inputProps}\r\n />\r\n </div>\r\n </TooltipTrigger>\r\n {error && <TooltipContent>{error}</TooltipContent>}\r\n </Tooltip>\r\n <Tooltip>\r\n <TooltipTrigger asChild>\r\n <div>\r\n <InputGroupButton\r\n type=\"button\"\r\n variant={buttonVariants.add}\r\n className={cn(\r\n \"rounded-md ml-auto\",\r\n classNames.addButton || \"\",\r\n )}\r\n size={buttonSizes.add}\r\n onClick={() => handleValue(inputValue)}\r\n disabled={isDisabled || isMaxReached || !inputValue}\r\n aria-label={addButtonLabel}\r\n >\r\n <AddIcon className={iconSizes.add} />\r\n <span className=\"sr-only\">{addButtonLabel}</span>\r\n </InputGroupButton>\r\n </div>\r\n </TooltipTrigger>\r\n {isMaxReached && messages.maxReached && (\r\n <TooltipContent side=\"bottom\">\r\n {messages.maxReached(maxItems!)}\r\n </TooltipContent>\r\n )}\r\n </Tooltip>\r\n </InputGroupAddon>\r\n </InputGroup>\r\n );\r\n };\r\n\r\n return Widget;\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -4,8 +4,8 @@ import {
|
|
|
4
4
|
InputGroupAddon,
|
|
5
5
|
InputGroupInput,
|
|
6
6
|
InputGroupText
|
|
7
|
-
} from "@
|
|
8
|
-
import { cn } from "@
|
|
7
|
+
} from "@ayasofyazilim/ui/components/input-group";
|
|
8
|
+
import { cn } from "@ayasofyazilim/ui/lib/utils";
|
|
9
9
|
const URLInputWidget = (props) => {
|
|
10
10
|
const {
|
|
11
11
|
uiSchema,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/custom/schema-form/widgets/url.tsx"],"sourcesContent":["import {} from \"@radix-ui/react-tooltip\";\r\nimport {\r\n InputGroup,\r\n InputGroupAddon,\r\n InputGroupInput,\r\n InputGroupText,\r\n} from \"@
|
|
1
|
+
{"version":3,"sources":["../../../../src/custom/schema-form/widgets/url.tsx"],"sourcesContent":["import {} from \"@radix-ui/react-tooltip\";\r\nimport {\r\n InputGroup,\r\n InputGroupAddon,\r\n InputGroupInput,\r\n InputGroupText,\r\n} from \"@ayasofyazilim/ui/components/input-group\";\r\nimport { cn } from \"@ayasofyazilim/ui/lib/utils\";\r\nimport { WidgetProps } from \"@rjsf/utils\";\r\n\r\nexport const URLInputWidget = (props: WidgetProps) => {\r\n const {\r\n uiSchema,\r\n id,\r\n className,\r\n onChange,\r\n value,\r\n defaultValue,\r\n disabled,\r\n readOnly,\r\n } = props;\r\n\r\n const required = uiSchema?.[\"ui:required\"] || props.required;\r\n\r\n return (\r\n <InputGroup>\r\n <InputGroupInput\r\n placeholder=\"example.com\"\r\n id={id}\r\n data-testid={id}\r\n onBlur={\r\n props.onBlur && ((event) => props.onBlur(id, event.target.value))\r\n }\r\n className={cn(\"pl-1!\", className)}\r\n required={required}\r\n onChange={(event) => {\r\n if (event.target.value === \"\") {\r\n onChange(undefined);\r\n } else {\r\n onChange(event.target.value);\r\n }\r\n }}\r\n defaultValue={value || defaultValue}\r\n readOnly={readOnly}\r\n disabled={disabled}\r\n autoComplete={uiSchema?.[\"ui:autocomplete\"]}\r\n onKeyDown={(e) => {\r\n e.key === \"Enter\" && e.preventDefault();\r\n }}\r\n />\r\n <InputGroupAddon>\r\n <InputGroupText>{props.placeholder}</InputGroupText>\r\n </InputGroupAddon>\r\n </InputGroup>\r\n );\r\n};\r\n"],"mappings":"AAyBI,SACE,KADF;AAxBJ;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,UAAU;AAGZ,MAAM,iBAAiB,CAAC,UAAuB;AACpD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,WAAW,WAAW,aAAa,KAAK,MAAM;AAEpD,SACE,qBAAC,cACC;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,aAAY;AAAA,QACZ;AAAA,QACA,eAAa;AAAA,QACb,QACE,MAAM,WAAW,CAAC,UAAU,MAAM,OAAO,IAAI,MAAM,OAAO,KAAK;AAAA,QAEjE,WAAW,GAAG,SAAS,SAAS;AAAA,QAChC;AAAA,QACA,UAAU,CAAC,UAAU;AACnB,cAAI,MAAM,OAAO,UAAU,IAAI;AAC7B,qBAAS,MAAS;AAAA,UACpB,OAAO;AACL,qBAAS,MAAM,OAAO,KAAK;AAAA,UAC7B;AAAA,QACF;AAAA,QACA,cAAc,SAAS;AAAA,QACvB;AAAA,QACA;AAAA,QACA,cAAc,WAAW,iBAAiB;AAAA,QAC1C,WAAW,CAAC,MAAM;AAChB,YAAE,QAAQ,WAAW,EAAE,eAAe;AAAA,QACxC;AAAA;AAAA,IACF;AAAA,IACA,oBAAC,mBACC,8BAAC,kBAAgB,gBAAM,aAAY,GACrC;AAAA,KACF;AAEJ;","names":[]}
|