dinocollab-core 2.1.28 → 2.1.30
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/_virtual/_rollupPluginBabelHelpers.js +2 -2
- package/dist/src/api-context/alert-global.js +1 -1
- package/dist/src/api-context/alert-global.js.map +1 -1
- package/dist/src/api-context/drawer-global.js +1 -1
- package/dist/src/api-context/drawer-global.js.map +1 -1
- package/dist/src/api-context/global-modal.js +1 -1
- package/dist/src/api-context/global-modal.js.map +1 -1
- package/dist/src/api-context/popover-global.js +1 -1
- package/dist/src/api-context/popover-global.js.map +1 -1
- package/dist/src/api-context/popover.js +1 -1
- package/dist/src/api-context/popover.js.map +1 -1
- package/dist/src/components/breadcrumbs.js +1 -1
- package/dist/src/components/breadcrumbs.js.map +1 -1
- package/dist/src/components/copy-to-clipboard.js +1 -1
- package/dist/src/components/copy-to-clipboard.js.map +1 -1
- package/dist/src/components/create.multi-select-dropdown.js +1 -1
- package/dist/src/components/create.multi-select-dropdown.js.map +1 -1
- package/dist/src/components/help-tooltip.js +1 -1
- package/dist/src/components/help-tooltip.js.map +1 -1
- package/dist/src/components/image-with-fallback.js +1 -1
- package/dist/src/components/image-with-fallback.js.map +1 -1
- package/dist/src/components/rich-tooltip.js +1 -1
- package/dist/src/components/rich-tooltip.js.map +1 -1
- package/dist/src/components/text-editor.js +1 -1
- package/dist/src/components/text-editor.js.map +1 -1
- package/dist/src/components/text-editor.preview.js +1 -1
- package/dist/src/components/text-editor.preview.js.map +1 -1
- package/dist/src/data-view/animation-switch.js +1 -1
- package/dist/src/data-view/animation-switch.js.map +1 -1
- package/dist/src/data-view/convert-filter-to-graphql.js +1 -1
- package/dist/src/data-view/convert-filter-to-graphql.js.map +1 -1
- package/dist/src/data-view/create.active-filters-panel.js +1 -1
- package/dist/src/data-view/create.active-filters-panel.js.map +1 -1
- package/dist/src/data-view/create.data-view.js +1 -1
- package/dist/src/data-view/create.data-view.js.map +1 -1
- package/dist/src/data-view/create.filter-bar.js +1 -1
- package/dist/src/data-view/create.filter-bar.js.map +1 -1
- package/dist/src/data-view/create.filter-menu.js +1 -1
- package/dist/src/data-view/create.filter-menu.js.map +1 -1
- package/dist/src/data-view/create.pagination-bar.js +1 -1
- package/dist/src/data-view/create.pagination-bar.js.map +1 -1
- package/dist/src/data-view/create.popper-panel.js +1 -1
- package/dist/src/data-view/create.popper-panel.js.map +1 -1
- package/dist/src/data-view/create.search-match.js +1 -1
- package/dist/src/data-view/create.search-match.js.map +1 -1
- package/dist/src/data-view/create.sort-menu.js +1 -1
- package/dist/src/data-view/create.sort-menu.js.map +1 -1
- package/dist/src/data-view/create.view-mode.js +1 -1
- package/dist/src/data-view/create.view-mode.js.map +1 -1
- package/dist/src/data-view/dino.js +1 -1
- package/dist/src/data-view/dino.js.map +1 -1
- package/dist/src/data-view/filter-store.js +1 -1
- package/dist/src/data-view/filter-store.js.map +1 -1
- package/dist/src/data-view/helpers.js +1 -1
- package/dist/src/data-view/helpers.js.map +1 -1
- package/dist/src/data-view/scroll-tracking.js +1 -1
- package/dist/src/data-view/scroll-tracking.js.map +1 -1
- package/dist/src/data-view/ui.units.js +1 -1
- package/dist/src/data-view/ui.units.js.map +1 -1
- package/dist/src/data-view/view-mode.content.js +1 -1
- package/dist/src/data-view/view-mode.content.js.map +1 -1
- package/dist/src/data-view/view-mode.units.js +1 -1
- package/dist/src/data-view/view-mode.units.js.map +1 -1
- package/dist/src/form/create.autocomplete.chips.js +1 -1
- package/dist/src/form/create.autocomplete.chips.js.map +1 -1
- package/dist/src/form/create.color-picker.js +1 -1
- package/dist/src/form/create.color-picker.js.map +1 -1
- package/dist/src/form/create.date-expired.js +1 -1
- package/dist/src/form/create.date-expired.js.map +1 -1
- package/dist/src/form/create.date-picker.js +1 -1
- package/dist/src/form/create.date-picker.js.map +1 -1
- package/dist/src/form/create.form-base.js +1 -1
- package/dist/src/form/create.form-base.js.map +1 -1
- package/dist/src/form/create.form-comfirm.js +1 -1
- package/dist/src/form/create.form-comfirm.js.map +1 -1
- package/dist/src/form/create.form-grid-layout.js +1 -1
- package/dist/src/form/create.form-grid-layout.js.map +1 -1
- package/dist/src/form/create.input-file.csv-local-parser.js +1 -1
- package/dist/src/form/create.input-file.csv-local-parser.js.map +1 -1
- package/dist/src/form/create.input.file.js +1 -1
- package/dist/src/form/create.input.file.js.map +1 -1
- package/dist/src/form/create.input.image-file.js +1 -1
- package/dist/src/form/create.input.image-file.js.map +1 -1
- package/dist/src/form/create.input.js +1 -1
- package/dist/src/form/create.input.js.map +1 -1
- package/dist/src/form/create.select-simple.js +1 -1
- package/dist/src/form/create.select-simple.js.map +1 -1
- package/dist/src/form/create.select-with-api.js +1 -1
- package/dist/src/form/create.select-with-api.js.map +1 -1
- package/dist/src/form/create.text-editor.js +1 -1
- package/dist/src/form/create.text-editor.js.map +1 -1
- package/dist/src/form/decorator.form.js +1 -1
- package/dist/src/form/decorator.form.js.map +1 -1
- package/dist/src/form/decorator.js +1 -1
- package/dist/src/form/decorator.js.map +1 -1
- package/dist/src/form/dino-form.js +1 -1
- package/dist/src/form/dino-form.js.map +1 -1
- package/dist/src/form/helpers.js +1 -1
- package/dist/src/form/helpers.js.map +1 -1
- package/dist/src/form/modal-wrapper.js +1 -1
- package/dist/src/form/modal-wrapper.js.map +1 -1
- package/dist/src/form/validator.js +1 -1
- package/dist/src/form/validator.js.map +1 -1
- package/dist/src/hooks/check-scrolled.js +1 -1
- package/dist/src/hooks/check-scrolled.js.map +1 -1
- package/dist/src/hooks/debounce.js +1 -1
- package/dist/src/hooks/debounce.js.map +1 -1
- package/dist/src/hooks/use-fetch-data.js +1 -1
- package/dist/src/hooks/use-fetch-data.js.map +1 -1
- package/dist/src/http-service/base/crud-service-base.js +1 -1
- package/dist/src/http-service/base/crud-service-base.js.map +1 -1
- package/dist/src/http-service/base/helpers.js +1 -1
- package/dist/src/http-service/base/helpers.js.map +1 -1
- package/dist/src/http-service/base/service-base.js +1 -1
- package/dist/src/http-service/base/service-base.js.map +1 -1
- package/dist/src/http-service/graphql/app-profile.js +1 -1
- package/dist/src/http-service/graphql/app-profile.js.map +1 -1
- package/dist/src/http-service/graphql/graphql-request.js +1 -1
- package/dist/src/http-service/graphql/graphql-request.js.map +1 -1
- package/dist/src/http-service/graphql/request-param.js +1 -1
- package/dist/src/http-service/graphql/request-param.js.map +1 -1
- package/dist/src/lab/attach-widget/helpers.js +1 -1
- package/dist/src/lab/attach-widget/helpers.js.map +1 -1
- package/dist/src/lab/attach-widget/modal.js +1 -1
- package/dist/src/lab/attach-widget/modal.js.map +1 -1
- package/dist/src/lab/attach-widget/styled.js +1 -1
- package/dist/src/lab/attach-widget/styled.js.map +1 -1
- package/dist/src/lab/attach-widget/widget.js +1 -1
- package/dist/src/lab/attach-widget/widget.js.map +1 -1
- package/dist/src/lab/input.social-links/create.js +1 -1
- package/dist/src/lab/input.social-links/create.js.map +1 -1
- package/dist/src/lab/input.social-links/units.js +1 -1
- package/dist/src/lab/input.social-links/units.js.map +1 -1
- package/dist/src/mfe-shared/navigation.js +1 -1
- package/dist/src/mfe-shared/navigation.js.map +1 -1
- package/dist/src/redux/create.hoc-lazy.js +1 -1
- package/dist/src/redux/create.hoc-lazy.js.map +1 -1
- package/dist/src/redux/dino.js +1 -1
- package/dist/src/redux/dino.js.map +1 -1
- package/dist/src/redux/ui.error-page.js +1 -1
- package/dist/src/redux/ui.error-page.js.map +1 -1
- package/dist/src/table/create.action-row.js +1 -1
- package/dist/src/table/create.action-row.js.map +1 -1
- package/dist/src/table/create.table.js +1 -1
- package/dist/src/table/create.table.js.map +1 -1
- package/dist/src/table/custom.filter-operators.js +1 -1
- package/dist/src/table/custom.filter-operators.js.map +1 -1
- package/dist/src/table/dino.js +1 -1
- package/dist/src/table/dino.js.map +1 -1
- package/dist/src/table/helpers.js +1 -1
- package/dist/src/table/helpers.js.map +1 -1
- package/dist/src/table/toolbar-pannel.js +1 -1
- package/dist/src/table/toolbar-pannel.js.map +1 -1
- package/dist/src/table/ui.buttons.js +1 -1
- package/dist/src/table/ui.buttons.js.map +1 -1
- package/dist/src/table/ui.units.js +1 -1
- package/dist/src/table/ui.units.js.map +1 -1
- package/dist/src/table-grid/create.table-grid.js +1 -1
- package/dist/src/table-grid/create.table-grid.js.map +1 -1
- package/dist/src/table-grid/dino.js +1 -1
- package/dist/src/table-grid/dino.js.map +1 -1
- package/dist/src/table-grid/filter-bar/base.js +1 -1
- package/dist/src/table-grid/filter-bar/base.js.map +1 -1
- package/dist/src/table-grid/filter-bar/create.filter-bar.js +1 -1
- package/dist/src/table-grid/filter-bar/create.filter-bar.js.map +1 -1
- package/dist/src/table-grid/filter-bar/create.filter-menu.js +1 -1
- package/dist/src/table-grid/filter-bar/create.filter-menu.js.map +1 -1
- package/dist/src/table-grid/filter-bar/create.filter-panel.js +1 -1
- package/dist/src/table-grid/filter-bar/create.filter-panel.js.map +1 -1
- package/dist/src/table-grid/filter-bar/create.filtered.js +1 -1
- package/dist/src/table-grid/filter-bar/create.filtered.js.map +1 -1
- package/dist/src/table-grid/filter-bar/ui.units.js +1 -1
- package/dist/src/table-grid/filter-bar/ui.units.js.map +1 -1
- package/dist/src/table-grid/item-actions.js +1 -1
- package/dist/src/table-grid/item-actions.js.map +1 -1
- package/dist/src/table-grid/styled.js +1 -1
- package/dist/src/table-grid/styled.js.map +1 -1
- package/dist/src/table-grid/toolbar-pannel.js +1 -1
- package/dist/src/table-grid/toolbar-pannel.js.map +1 -1
- package/dist/src/table-grid/url-query-param.js +1 -1
- package/dist/src/table-grid/url-query-param.js.map +1 -1
- package/dist/src/utils/helpers.js +1 -1
- package/dist/src/utils/helpers.js.map +1 -1
- package/dist/src/utils/json-object.js +1 -1
- package/dist/src/utils/json-object.js.map +1 -1
- package/dist/src/utils/query-param.js +1 -1
- package/dist/src/utils/query-param.js.map +1 -1
- package/dist/types/http-service/base/helpers.d.ts +9 -0
- package/dist/types/mfe-shared/navigation.d.ts +5 -2
- package/dist/types/table-grid/styled.d.ts +1 -0
- package/dist/types/table-grid/types.d.ts +2 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorator.js","sources":["../../../src/form/decorator.ts"],"sourcesContent":["import 'reflect-metadata'\r\nimport { ComponentType } from 'react'\r\nimport { IFormInputBase } from './types'\r\nimport { IConfigValue, IFormValidatorConfig } from './validator'\r\n\r\nconst ClassRegistry = new Map<string, any>()\r\n\r\nexport function registerForm(name?: string) {\r\n return function <T extends { new (...args: any[]): {} }>(constructor: T) {\r\n const key = name || constructor.name\r\n ClassRegistry.set(key, constructor)\r\n class RegisteredClass extends constructor {\r\n __class = key\r\n constructor(...args: any[]) {\r\n super(...args)\r\n this.__class = key\r\n }\r\n }\r\n Object.defineProperty(RegisteredClass, 'name', { value: constructor.name })\r\n Object.defineProperty(RegisteredClass, '__class', { value: key })\r\n return RegisteredClass\r\n }\r\n}\r\n\r\n/**\r\n * Check whether a class (constructor) or an instance has been registered\r\n * with the @registerForm decorator.\r\n *\r\n * Accepts:\r\n * - the decorated constructor (function)\r\n * - the original constructor (function)\r\n * - an instance of the class\r\n *\r\n * Returns true when the underlying registry contains an entry for the\r\n * class key (either the custom name provided to the decorator or the\r\n * constructor name).\r\n */\r\nexport function isFormRegistered(target: any): boolean {\r\n if (!target) return false\r\n const ctor = typeof target === 'function' ? target : target?.constructor\r\n if (!ctor) return false\r\n const key = (ctor as any).__class || (ctor as any).name\r\n if (!key) return false\r\n return ClassRegistry.has(key)\r\n}\r\n\r\nexport interface IPreSubmitMetadata<T = any> {\r\n handler: (data: T, oldData: T) => Promise<any> | any\r\n}\r\n\r\nexport function formPreSubmit<T = any>(handler: IPreSubmitMetadata<T>['handler']) {\r\n return function <T extends { new (...args: any[]): {} }>(constructor: T) {\r\n Reflect.defineMetadata('form:presubmit', { handler }, constructor)\r\n return constructor\r\n }\r\n}\r\n\r\nexport function getFormPreSubmit(targetClass: any): IPreSubmitMetadata | undefined {\r\n return Reflect.getMetadata('form:presubmit', targetClass)\r\n}\r\n\r\nexport interface IFieldMetadata<T = any> {\r\n name: keyof T | string\r\n label?: string\r\n placeholder?: string\r\n default?: any\r\n type?: any\r\n size?: Partial<Record<'xs' | 'sm' | 'md' | 'lg' | 'xl', number>>\r\n renderInput?: ComponentType<IFormInputBase<T>>\r\n}\r\n\r\nexport function formField(options: Omit<IFieldMetadata, 'name'>) {\r\n return function (target: any, propertyKey: string) {\r\n const designType = Reflect.getMetadata('design:type', target, propertyKey)\r\n const actualType = options.type || designType\r\n const existing: IFieldMetadata[] = Reflect.getMetadata('form:fields', target.constructor) || []\r\n const fields = [...existing]\r\n fields.push({ name: propertyKey, type: actualType, label: options.label || propertyKey, ...options })\r\n Reflect.defineMetadata('form:fields', fields, target.constructor)\r\n }\r\n}\r\n\r\nexport const getFormFields = (targetClass: any): IFieldMetadata[] => {\r\n return Reflect.getMetadata('form:fields', targetClass) || []\r\n}\r\n\r\nexport interface IValidationMetadata extends IConfigValue {\r\n name: string\r\n}\r\n\r\nexport function formValidate(options: Omit<IValidationMetadata, 'name'>) {\r\n return function (target: any, propertyKey: string) {\r\n const existing: IValidationMetadata[] = Reflect.getMetadata('form:validators', target.constructor) || []\r\n const validators = [...existing]\r\n validators.push({ name: propertyKey, ...options })\r\n Reflect.defineMetadata('form:validators', validators, target.constructor)\r\n }\r\n}\r\n\r\nexport function getFormValidators<T = any>(targetClass: any): IFormValidatorConfig<T> {\r\n const metas: IValidationMetadata[] = Reflect.getMetadata('form:validators', targetClass) || []\r\n return metas.reduce<IFormValidatorConfig<T>>((acc, curr) => {\r\n acc[curr.name as keyof T] = { Rules: curr.Rules, label: curr.label }\r\n return acc\r\n }, {})\r\n}\r\n"],"names":["ClassRegistry","Map","registerForm","name","constructor","key","set","RegisteredClass","_constructor","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_callSuper","this","concat","_defineProperty","__class","_inherits","_createClass","Object","defineProperty","value","isFormRegistered","target","ctor","has","formPreSubmit","handler","Reflect","defineMetadata","getFormPreSubmit","targetClass","getMetadata","formField","options","propertyKey","designType","actualType","type","existing","fields","_toConsumableArray","push","_objectSpread","label","getFormFields","formValidate","validators","getFormValidators","reduce","acc","curr","Rules"],"mappings":"2NAKA,IAAMA,EAAgB,IAAIC,IAEpB,SAAUC,EAAaC,GAC3B,OAAO,SAAkDC,GACvD,IAAMC,EAAMF,GAAQC,EAAYD,KAChCH,EAAcM,IAAID,EAAKD,GAAY,IAC7BG,WAAgBC,GAEpB,SAAAD,IAA0B,IAAAE,EAAAC,OAAAH,GAAA,IAAA,IAAAI,EAAAC,UAAAC,OAAXC,EAAWC,IAAAA,MAAAJ,GAAAK,EAAA,EAAAA,EAAAL,EAAAK,IAAXF,EAAWE,GAAAJ,UAAAI,GAEN,OADlBP,EAAAQ,EAAAC,KAAAX,EAAAY,GAAAA,OAASL,IAAKM,EAAAX,EAAA,UAFNJ,GAGRI,EAAKY,QAAUhB,EAAGI,CACpB,CAAC,OAAAa,EAAAf,EAAAC,GAAAe,EAAAhB,EAAA,EAL2BH,GAS9B,OAFAoB,OAAOC,eAAelB,EAAiB,OAAQ,CAAEmB,MAAOtB,EAAYD,OACpEqB,OAAOC,eAAelB,EAAiB,UAAW,CAAEmB,MAAOrB,IACpDE,CACR,CACH,CAeM,SAAUoB,EAAiBC,GAC/B,IAAKA,EAAQ,OAAO,EACpB,IAAMC,EAAyB,mBAAXD,EAAwBA,EAASA,aAAAA,EAAAA,EAAQxB,YAC7D,IAAKyB,EAAM,OAAO,EAClB,IAAMxB,EAAOwB,EAAaR,SAAYQ,EAAa1B,KACnD,QAAKE,GACEL,EAAc8B,IAAIzB,EAC3B,CAMM,SAAU0B,EAAuBC,GACrC,OAAO,SAAkD5B,GAEvD,OADA6B,QAAQC,eAAe,iBAAkB,CAAEF,QAAAA,GAAW5B,GAC/CA,CACR,CACH,CAEM,SAAU+B,EAAiBC,GAC/B,OAAOH,QAAQI,YAAY,iBAAkBD,EAC/C,CAYM,SAAUE,EAAUC,GACxB,OAAO,SAAUX,EAAaY,GAC5B,IAAMC,EAAaR,QAAQI,YAAY,cAAeT,EAAQY,GACxDE,EAAaH,EAAQI,MAAQF,EAC7BG,EAA6BX,QAAQI,YAAY,cAAeT,EAAOxB,cAAgB,GACvFyC,EAAMC,EAAOF,GACnBC,EAAOE,KAAIC,EAAA,CAAG7C,KAAMqC,EAAaG,KAAMD,EAAYO,MAAOV,EAAQU,OAAST,GAAgBD,IAC3FN,QAAQC,eAAe,cAAeW,EAAQjB,EAAOxB,YACtD,CACH,KAEa8C,EAAgB,SAACd,GAC5B,OAAOH,QAAQI,YAAY,cAAeD,IAAgB,EAC5D,EAMM,SAAUe,EAAaZ,GAC3B,OAAO,SAAUX,EAAaY,GAC5B,IAAMI,EAAkCX,QAAQI,YAAY,kBAAmBT,EAAOxB,cAAgB,GAChGgD,EAAUN,EAAOF,GACvBQ,EAAWL,KAAIC,EAAA,CAAG7C,KAAMqC,GAAgBD,IACxCN,QAAQC,eAAe,kBAAmBkB,EAAYxB,EAAOxB,YAC9D,CACH,CAEM,SAAUiD,EAA2BjB,GAEzC,OADqCH,QAAQI,YAAY,kBAAmBD,IAAgB,IAC/EkB,
|
|
1
|
+
{"version":3,"file":"decorator.js","sources":["../../../src/form/decorator.ts"],"sourcesContent":["import 'reflect-metadata'\r\nimport { ComponentType } from 'react'\r\nimport { IFormInputBase } from './types'\r\nimport { IConfigValue, IFormValidatorConfig } from './validator'\r\n\r\nconst ClassRegistry = new Map<string, any>()\r\n\r\nexport function registerForm(name?: string) {\r\n return function <T extends { new (...args: any[]): {} }>(constructor: T) {\r\n const key = name || constructor.name\r\n ClassRegistry.set(key, constructor)\r\n class RegisteredClass extends constructor {\r\n __class = key\r\n constructor(...args: any[]) {\r\n super(...args)\r\n this.__class = key\r\n }\r\n }\r\n Object.defineProperty(RegisteredClass, 'name', { value: constructor.name })\r\n Object.defineProperty(RegisteredClass, '__class', { value: key })\r\n return RegisteredClass\r\n }\r\n}\r\n\r\n/**\r\n * Check whether a class (constructor) or an instance has been registered\r\n * with the @registerForm decorator.\r\n *\r\n * Accepts:\r\n * - the decorated constructor (function)\r\n * - the original constructor (function)\r\n * - an instance of the class\r\n *\r\n * Returns true when the underlying registry contains an entry for the\r\n * class key (either the custom name provided to the decorator or the\r\n * constructor name).\r\n */\r\nexport function isFormRegistered(target: any): boolean {\r\n if (!target) return false\r\n const ctor = typeof target === 'function' ? target : target?.constructor\r\n if (!ctor) return false\r\n const key = (ctor as any).__class || (ctor as any).name\r\n if (!key) return false\r\n return ClassRegistry.has(key)\r\n}\r\n\r\nexport interface IPreSubmitMetadata<T = any> {\r\n handler: (data: T, oldData: T) => Promise<any> | any\r\n}\r\n\r\nexport function formPreSubmit<T = any>(handler: IPreSubmitMetadata<T>['handler']) {\r\n return function <T extends { new (...args: any[]): {} }>(constructor: T) {\r\n Reflect.defineMetadata('form:presubmit', { handler }, constructor)\r\n return constructor\r\n }\r\n}\r\n\r\nexport function getFormPreSubmit(targetClass: any): IPreSubmitMetadata | undefined {\r\n return Reflect.getMetadata('form:presubmit', targetClass)\r\n}\r\n\r\nexport interface IFieldMetadata<T = any> {\r\n name: keyof T | string\r\n label?: string\r\n placeholder?: string\r\n default?: any\r\n type?: any\r\n size?: Partial<Record<'xs' | 'sm' | 'md' | 'lg' | 'xl', number>>\r\n renderInput?: ComponentType<IFormInputBase<T>>\r\n}\r\n\r\nexport function formField(options: Omit<IFieldMetadata, 'name'>) {\r\n return function (target: any, propertyKey: string) {\r\n const designType = Reflect.getMetadata('design:type', target, propertyKey)\r\n const actualType = options.type || designType\r\n const existing: IFieldMetadata[] = Reflect.getMetadata('form:fields', target.constructor) || []\r\n const fields = [...existing]\r\n fields.push({ name: propertyKey, type: actualType, label: options.label || propertyKey, ...options })\r\n Reflect.defineMetadata('form:fields', fields, target.constructor)\r\n }\r\n}\r\n\r\nexport const getFormFields = (targetClass: any): IFieldMetadata[] => {\r\n return Reflect.getMetadata('form:fields', targetClass) || []\r\n}\r\n\r\nexport interface IValidationMetadata extends IConfigValue {\r\n name: string\r\n}\r\n\r\nexport function formValidate(options: Omit<IValidationMetadata, 'name'>) {\r\n return function (target: any, propertyKey: string) {\r\n const existing: IValidationMetadata[] = Reflect.getMetadata('form:validators', target.constructor) || []\r\n const validators = [...existing]\r\n validators.push({ name: propertyKey, ...options })\r\n Reflect.defineMetadata('form:validators', validators, target.constructor)\r\n }\r\n}\r\n\r\nexport function getFormValidators<T = any>(targetClass: any): IFormValidatorConfig<T> {\r\n const metas: IValidationMetadata[] = Reflect.getMetadata('form:validators', targetClass) || []\r\n return metas.reduce<IFormValidatorConfig<T>>((acc, curr) => {\r\n acc[curr.name as keyof T] = { Rules: curr.Rules, label: curr.label }\r\n return acc\r\n }, {})\r\n}\r\n"],"names":["ClassRegistry","Map","registerForm","name","constructor","key","set","RegisteredClass","_constructor","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_callSuper","this","concat","_defineProperty","__class","_inherits","_createClass","Object","defineProperty","value","isFormRegistered","target","ctor","has","formPreSubmit","handler","Reflect","defineMetadata","getFormPreSubmit","targetClass","getMetadata","formField","options","propertyKey","designType","actualType","type","existing","fields","_toConsumableArray","push","_objectSpread","label","getFormFields","formValidate","validators","getFormValidators","reduce","acc","curr","Rules"],"mappings":"2NAKA,IAAMA,EAAgB,IAAIC,IAEpB,SAAUC,EAAaC,GAC3B,OAAO,SAAkDC,GACvD,IAAMC,EAAMF,GAAQC,EAAYD,KAChCH,EAAcM,IAAID,EAAKD,GAAY,IAC7BG,WAAgBC,GAEpB,SAAAD,IAA0B,IAAAE,EAAAC,OAAAH,GAAA,IAAA,IAAAI,EAAAC,UAAAC,OAAXC,EAAWC,IAAAA,MAAAJ,GAAAK,EAAA,EAAAA,EAAAL,EAAAK,IAAXF,EAAWE,GAAAJ,UAAAI,GAEN,OADlBP,EAAAQ,EAAAC,KAAAX,EAAAY,GAAAA,OAASL,IAAKM,EAAAX,EAAA,UAFNJ,GAGRI,EAAKY,QAAUhB,EAAGI,CACpB,CAAC,OAAAa,EAAAf,EAAAC,GAAAe,EAAAhB,EAAA,EAL2BH,GAS9B,OAFAoB,OAAOC,eAAelB,EAAiB,OAAQ,CAAEmB,MAAOtB,EAAYD,OACpEqB,OAAOC,eAAelB,EAAiB,UAAW,CAAEmB,MAAOrB,IACpDE,CACR,CACH,CAeM,SAAUoB,EAAiBC,GAC/B,IAAKA,EAAQ,OAAO,EACpB,IAAMC,EAAyB,mBAAXD,EAAwBA,EAASA,aAAAA,EAAAA,EAAQxB,YAC7D,IAAKyB,EAAM,OAAO,EAClB,IAAMxB,EAAOwB,EAAaR,SAAYQ,EAAa1B,KACnD,QAAKE,GACEL,EAAc8B,IAAIzB,EAC3B,CAMM,SAAU0B,EAAuBC,GACrC,OAAO,SAAkD5B,GAEvD,OADA6B,QAAQC,eAAe,iBAAkB,CAAEF,QAAAA,GAAW5B,GAC/CA,CACR,CACH,CAEM,SAAU+B,EAAiBC,GAC/B,OAAOH,QAAQI,YAAY,iBAAkBD,EAC/C,CAYM,SAAUE,EAAUC,GACxB,OAAO,SAAUX,EAAaY,GAC5B,IAAMC,EAAaR,QAAQI,YAAY,cAAeT,EAAQY,GACxDE,EAAaH,EAAQI,MAAQF,EAC7BG,EAA6BX,QAAQI,YAAY,cAAeT,EAAOxB,cAAgB,GACvFyC,EAAMC,EAAOF,GACnBC,EAAOE,KAAIC,EAAA,CAAG7C,KAAMqC,EAAaG,KAAMD,EAAYO,MAAOV,EAAQU,OAAST,GAAgBD,IAC3FN,QAAQC,eAAe,cAAeW,EAAQjB,EAAOxB,YACtD,CACH,KAEa8C,EAAgB,SAACd,GAC5B,OAAOH,QAAQI,YAAY,cAAeD,IAAgB,EAC5D,EAMM,SAAUe,EAAaZ,GAC3B,OAAO,SAAUX,EAAaY,GAC5B,IAAMI,EAAkCX,QAAQI,YAAY,kBAAmBT,EAAOxB,cAAgB,GAChGgD,EAAUN,EAAOF,GACvBQ,EAAWL,KAAIC,EAAA,CAAG7C,KAAMqC,GAAgBD,IACxCN,QAAQC,eAAe,kBAAmBkB,EAAYxB,EAAOxB,YAC9D,CACH,CAEM,SAAUiD,EAA2BjB,GAEzC,OADqCH,QAAQI,YAAY,kBAAmBD,IAAgB,IAC/EkB,OAAgC,SAACC,EAAKC,GAEjD,OADAD,EAAIC,EAAKrD,MAAmB,CAAEsD,MAAOD,EAAKC,MAAOR,MAAOO,EAAKP,OACtDM,CACR,EAAE,GACL"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createClass as r,classCallCheck as e,defineProperty as t}from"../../_virtual/_rollupPluginBabelHelpers.js";import{FormBottomBarWrap as i}from"./create.form-grid-layout.units.js";import{createInputFileCsvLocalParser as o}from"./create.input-file.csv-local-parser.js";import{DecoratorForm as a,createDecoratorForm as m}from"./decorator.form.js";import s from"./validator.js";import c from"./create.input.js";import p from"./modal-wrapper.js";import l from"./create.form-base.js";import f from"./create.input.file.js";import h from"./create.date-picker.js";import j from"./create.text-editor.js";import{createColorPicker as u}from"./create.color-picker.js";import d from"./create.date-expired.js";import n from"./create.form-comfirm.js";import F from"./create.select-simple.js";import C from"./create.select-with-api.js";import v from"./create.form-grid-layout.js";import g from"./create.input.image-file.js";import k from"./create.autocomplete.chips.js";var x=new(r(
|
|
1
|
+
import{createClass as r,classCallCheck as e,defineProperty as t}from"../../_virtual/_rollupPluginBabelHelpers.js";import{FormBottomBarWrap as i}from"./create.form-grid-layout.units.js";import{createInputFileCsvLocalParser as o}from"./create.input-file.csv-local-parser.js";import{DecoratorForm as a,createDecoratorForm as m}from"./decorator.form.js";import s from"./validator.js";import c from"./create.input.js";import p from"./modal-wrapper.js";import l from"./create.form-base.js";import f from"./create.input.file.js";import h from"./create.date-picker.js";import j from"./create.text-editor.js";import{createColorPicker as u}from"./create.color-picker.js";import d from"./create.date-expired.js";import n from"./create.form-comfirm.js";import F from"./create.select-simple.js";import C from"./create.select-with-api.js";import v from"./create.form-grid-layout.js";import g from"./create.input.image-file.js";import k from"./create.autocomplete.chips.js";var x=new(r(function r(){e(this,r),t(this,"ModalWrap",p),t(this,"BottomBarWrap",i),t(this,"FormValidator",s),t(this,"validator",s.initial),t(this,"createFormBase",l),t(this,"createFormComfirm",n),t(this,"createFormGridLayout",v),t(this,"DecoratorForm",a),t(this,"createDecoratorForm",m),t(this,"createColorPicker",u),t(this,"createDateExpired",d),t(this,"createDatePicker",h),t(this,"createAutocompleteChip",k),t(this,"createInputFileCsvLocalParser",o),t(this,"createInputFile",f),t(this,"createInputImageFile",g),t(this,"createInput",c),t(this,"createSelectSimple",F),t(this,"createSelectWithApi",C),t(this,"createTextEditor",j)}));export{x as default};
|
|
2
2
|
//# sourceMappingURL=dino-form.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dino-form.js","sources":["../../../src/form/dino-form.tsx"],"sourcesContent":["import { FormBottomBarWrap } from './create.form-grid-layout.units'\r\nimport { createInputFileCsvLocalParser } from './create.input-file.csv-local-parser'\r\nimport DecoratorForm, { createDecoratorForm } from './decorator.form'\r\nimport FormValidator from './validator'\r\nimport createInput from './create.input'\r\nimport FormModalWrapper from './modal-wrapper'\r\nimport createFormBase from './create.form-base'\r\nimport CreateInputFile from './create.input.file'\r\nimport CreateDatePicker from './create.date-picker'\r\nimport CreateTextEditor from './create.text-editor'\r\nimport createColorPicker from './create.color-picker'\r\nimport CreateDateExpired from './create.date-expired'\r\nimport CreateFormComfirm from './create.form-comfirm'\r\nimport CreateSelectSimple from './create.select-simple'\r\nimport CreateSelectWithApi from './create.select-with-api'\r\nimport CreateFormGridLayout from './create.form-grid-layout'\r\nimport createInputImageFile from './create.input.image-file'\r\nimport CreateAutocompleteChip from './create.autocomplete.chips'\r\n\r\nclass DinoFormBase {\r\n //#region Base\r\n ModalWrap = FormModalWrapper\r\n BottomBarWrap = FormBottomBarWrap\r\n FormValidator = FormValidator\r\n validator = FormValidator.initial\r\n createFormBase = createFormBase\r\n createFormComfirm = CreateFormComfirm\r\n createFormGridLayout = CreateFormGridLayout\r\n DecoratorForm = DecoratorForm\r\n createDecoratorForm = createDecoratorForm\r\n //#endregion\r\n\r\n //#region Inputs\r\n createColorPicker = createColorPicker\r\n createDateExpired = CreateDateExpired\r\n createDatePicker = CreateDatePicker\r\n createAutocompleteChip = CreateAutocompleteChip\r\n createInputFileCsvLocalParser = createInputFileCsvLocalParser\r\n createInputFile = CreateInputFile\r\n createInputImageFile = createInputImageFile\r\n createInput = createInput\r\n createSelectSimple = CreateSelectSimple\r\n createSelectWithApi = CreateSelectWithApi\r\n createTextEditor = CreateTextEditor\r\n //#endregion\r\n}\r\n\r\nconst DinoForm = new DinoFormBase()\r\nexport default DinoForm\r\n"],"names":["DinoForm","_createClass","DinoFormBase","_classCallCheck","_defineProperty","FormModalWrapper","FormBottomBarWrap","FormValidator","this","initial","createFormBase","CreateFormComfirm","CreateFormGridLayout","DecoratorForm","createDecoratorForm","createColorPicker","CreateDateExpired","CreateDatePicker","CreateAutocompleteChip","createInputFileCsvLocalParser","CreateInputFile","createInputImageFile","createInput","CreateSelectSimple","CreateSelectWithApi","CreateTextEditor"],"mappings":"+7BAiBgE,IA8B1DA,EAAW,IA5BCC,
|
|
1
|
+
{"version":3,"file":"dino-form.js","sources":["../../../src/form/dino-form.tsx"],"sourcesContent":["import { FormBottomBarWrap } from './create.form-grid-layout.units'\r\nimport { createInputFileCsvLocalParser } from './create.input-file.csv-local-parser'\r\nimport DecoratorForm, { createDecoratorForm } from './decorator.form'\r\nimport FormValidator from './validator'\r\nimport createInput from './create.input'\r\nimport FormModalWrapper from './modal-wrapper'\r\nimport createFormBase from './create.form-base'\r\nimport CreateInputFile from './create.input.file'\r\nimport CreateDatePicker from './create.date-picker'\r\nimport CreateTextEditor from './create.text-editor'\r\nimport createColorPicker from './create.color-picker'\r\nimport CreateDateExpired from './create.date-expired'\r\nimport CreateFormComfirm from './create.form-comfirm'\r\nimport CreateSelectSimple from './create.select-simple'\r\nimport CreateSelectWithApi from './create.select-with-api'\r\nimport CreateFormGridLayout from './create.form-grid-layout'\r\nimport createInputImageFile from './create.input.image-file'\r\nimport CreateAutocompleteChip from './create.autocomplete.chips'\r\n\r\nclass DinoFormBase {\r\n //#region Base\r\n ModalWrap = FormModalWrapper\r\n BottomBarWrap = FormBottomBarWrap\r\n FormValidator = FormValidator\r\n validator = FormValidator.initial\r\n createFormBase = createFormBase\r\n createFormComfirm = CreateFormComfirm\r\n createFormGridLayout = CreateFormGridLayout\r\n DecoratorForm = DecoratorForm\r\n createDecoratorForm = createDecoratorForm\r\n //#endregion\r\n\r\n //#region Inputs\r\n createColorPicker = createColorPicker\r\n createDateExpired = CreateDateExpired\r\n createDatePicker = CreateDatePicker\r\n createAutocompleteChip = CreateAutocompleteChip\r\n createInputFileCsvLocalParser = createInputFileCsvLocalParser\r\n createInputFile = CreateInputFile\r\n createInputImageFile = createInputImageFile\r\n createInput = createInput\r\n createSelectSimple = CreateSelectSimple\r\n createSelectWithApi = CreateSelectWithApi\r\n createTextEditor = CreateTextEditor\r\n //#endregion\r\n}\r\n\r\nconst DinoForm = new DinoFormBase()\r\nexport default DinoForm\r\n"],"names":["DinoForm","_createClass","DinoFormBase","_classCallCheck","_defineProperty","FormModalWrapper","FormBottomBarWrap","FormValidator","this","initial","createFormBase","CreateFormComfirm","CreateFormGridLayout","DecoratorForm","createDecoratorForm","createColorPicker","CreateDateExpired","CreateDatePicker","CreateAutocompleteChip","createInputFileCsvLocalParser","CreateInputFile","createInputImageFile","createInput","CreateSelectSimple","CreateSelectWithApi","CreateTextEditor"],"mappings":"+7BAiBgE,IA8B1DA,EAAW,IA5BCC,EAAA,SAAAC,IAAAC,OAAAD,GAChBE,mBACYC,GAAgBD,uBACZE,GAAiBF,uBACjBG,GAAaH,EAAAI,KAAA,YACjBD,EAAcE,SAAOL,wBAChBM,GAAcN,2BACXO,GAAiBP,8BACdQ,GAAoBR,uBAC3BS,GAAaT,6BACPU,GAGtBV,2BACoBW,GAAiBX,2BACjBY,GAAiBZ,0BAClBa,GAAgBb,gCACVc,GAAsBd,uCACfe,GAA6Bf,yBAC3CgB,GAAehB,8BACViB,GAAoBjB,qBAC7BkB,GAAWlB,4BACJmB,GAAkBnB,6BACjBoB,GAAmBpB,0BACtBqB,EAAgB"}
|
package/dist/src/form/helpers.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{toConsumableArray as r,typeof as n,objectSpread2 as e,createForOfIteratorHelper as t}from"../../_virtual/_rollupPluginBabelHelpers.js";import i from"./validator.js";var o=function(r){for(var n=arguments.length,e=new Array(n>1?n-1:0),t=1;t<n;t++)e[t-1]=arguments[t];return e.length<1?r:e.filter(
|
|
1
|
+
import{toConsumableArray as r,typeof as n,objectSpread2 as e,createForOfIteratorHelper as t}from"../../_virtual/_rollupPluginBabelHelpers.js";import i from"./validator.js";var o=function(r){for(var n=arguments.length,e=new Array(n>1?n-1:0),t=1;t<n;t++)e[t-1]=arguments[t];return e.length<1?r:e.filter(function(r){return r}).reduce(function(r,n){return r=Object.assign(r,n)},r)},a=function(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),u=1;u<t;u++)i[u-1]=arguments[u];if((i=i.filter(function(r){return!!r})).length<1)return e;for(var f=[e].concat(r(i)).filter(function(r){return r}),c=f.reduce(function(e,t){if(!t)return e;var i=Object.keys(t).filter(function(r){return"object"===n(t[r])&&!Array.isArray(t[r])});return e.push.apply(e,r(i)),e},[]),l=o.apply(void 0,[e].concat(r(f.slice(1)))),s=l,v=f.slice(1).filter(function(r){return!!r}),p=function(){var n=c[y];s[n]=a.apply(void 0,[{},s[n]].concat(r(v.map(function(r){return r[n]}))))},y=0;y<c.length;y++)p();return l},u=function(r,n){return r&&r[n]?e(e({},r[n][0]),{},{error:!0}):{error:!1,message:""}},f=function(r){var n=Array.from(r).reduce(function(r,n){return r[n[0]]?Array.isArray(r[n[0]])?r[n[0]].push(n[1]):r[n[0]]=[r[n[0]],n[1]]:r[n[0]]=n[1],r},{});return Object.keys(n).forEach(function(r){var e=n[r];"string"!=typeof e||"true"!==e.toString().toLocaleLowerCase()&&"false"!==e.toString().toLocaleLowerCase()||(n[r]="true"===e.toString().toLocaleLowerCase())}),n},c=function(r){if("string"==typeof r)return r.startsWith("#")&&/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(r)?r:r.trim();if(Array.isArray(r))return r.map(function(r){return c(r)});if(r instanceof File)return r;if(r instanceof FileList)return r;if(r instanceof Date)return r;if("number"==typeof r||"boolean"==typeof r||null==r)return r;if(r instanceof HTMLElement)return r;if("function"==typeof r)return r;if(r&&"object"===n(r)){var e={};return Object.keys(r).forEach(function(n){e[n]=c(r[n])}),e}return r},l=function(r,n,e,t){var i=t.run(n);if(i){var o=e||{},a=Object.keys(n).filter(function(r){return!!n[r]}).filter(function(r){return n[r]instanceof File&&!!n[r].size});return a.push(r),a.forEach(function(r){i[r]?o[r]=i[r]:delete o[r]}),o}return null},s=function(r,n){var e,t=null===(e=r.response)||void 0===e?void 0:e.data;if(t){var i=Object.keys(n),o={};return i.forEach(function(r){var n=t[r];Array.isArray(n)&&n.length>0&&(o[r]=[{message:n[0]}])}),o}},v=function(){for(var n=arguments.length,e=new Array(n),t=0;t<n;t++)e[t]=arguments[t];for(var o=e.map(function(r){return null==r?void 0:r.configs}).filter(function(r){return!!r}),u=Object.assign.apply(Object,[{}].concat(r(o))),f=function(){var n=Object.keys(u)[c];u[n]=a.apply(void 0,[{}].concat(r(o.map(function(r){return r?r[n]:{Rules:[]}})))),u[n].Rules=o.map(function(r){return r?r[n]:{Rules:[]}}).reduce(function(n,e){var t;return n.push.apply(n,r(null!==(t=null==e?void 0:e.Rules)&&void 0!==t?t:[])),n},[])},c=0;c<Object.keys(u).length;c++)f();return new i(u)},p=function(r,n){if(0===r.length)return{valid:!1,message:"File is empty or cannot be parsed"};var e=Object.keys(r[0]),i=n.filter(function(r){return!e.includes(r)});if(i.length>0)return{valid:!1,message:"Missing required columns: ".concat(i.join(", "))};for(var o=0;o<r.length;o++){var a,u=r[o],f=t(n);try{for(f.s();!(a=f.n()).done;){var c=a.value,l=u[c];if("string"!=typeof l||""===l.trim())return{valid:!1,message:'Invalid or missing value for "'.concat(c.toString(),'" at row ').concat(o+2)}}}catch(r){f.e(r)}finally{f.f()}}return{valid:!0}};export{f as convertFormDataToJson,s as getErrorFromResponse,u as getErrorMessage,l as singleValidate,c as trimAllStrings,p as validateCsvModel,v as validateMerge};
|
|
2
2
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../../../src/form/helpers.ts"],"sourcesContent":["import { AxiosError } from 'axios'\r\nimport FormValidator, { IModelError, IRuleOption, IPartialError } from './validator'\r\n\r\ntype IAnyObject = { [key: string]: any }\r\nconst objectAssign = <T extends IAnyObject>(model: T, ...sources: (Partial<T> | undefined)[]) => {\r\n if (sources.length < 1) {\r\n return model\r\n }\r\n const temps = sources.filter((x) => x) as T[]\r\n return temps.reduce((a, b) => {\r\n a = Object.assign(a, b)\r\n return a\r\n }, model)\r\n}\r\n\r\nconst deepMerge = <T extends IAnyObject>(model: T, ...sources: (Partial<T> | undefined)[]) => {\r\n sources = sources.filter((x) => !!x)\r\n if (sources.length < 1) {\r\n return model\r\n }\r\n const temps = [model, ...sources].filter((x) => x)\r\n const fieldObjects = temps.reduce<string[]>((a, b) => {\r\n if (!b) return a\r\n const fields = Object.keys(b).filter((x) => typeof b[x] === 'object' && !Array.isArray(b[x]))\r\n a.push(...fields)\r\n return a\r\n }, [])\r\n\r\n const target = objectAssign<T>(model, ...temps.slice(1))\r\n const temp = target as any\r\n const temp2 = temps.slice(1).filter((x) => !!x) as Partial<T>[]\r\n for (let index = 0; index < fieldObjects.length; index++) {\r\n const element = fieldObjects[index]\r\n temp[element] = deepMerge({}, temp[element], ...temp2.map((x) => x[element]))\r\n }\r\n return target\r\n}\r\n\r\nexport const getErrorMessage = function <TModel>(MessageErrors: IPartialError<TModel> | undefined, key?: keyof TModel): IModelError {\r\n return MessageErrors && (MessageErrors as any)[key] ? { ...(MessageErrors as any)[key][0], error: true } : { error: false, message: '' }\r\n}\r\n\r\ntype IModelBase = {\r\n [key: string]: any\r\n}\r\n\r\nexport const convertFormDataToJson = function <TModel>(form: FormData): Partial<TModel> {\r\n const data = Array.from(form as any).reduce<Partial<TModel>>((a: unknown | any, b: any) => {\r\n if (!a[b[0]]) {\r\n a[b[0]] = b[1]\r\n } else if (Array.isArray(a[b[0]])) {\r\n a[b[0]].push(b[1])\r\n } else {\r\n a[b[0]] = [a[b[0]], b[1]]\r\n }\r\n return a\r\n }, {} as any) as any\r\n\r\n Object.keys(data).forEach((key) => {\r\n const value = data[key]\r\n if (typeof value === 'string' && (value.toString().toLocaleLowerCase() === 'true' || value.toString().toLocaleLowerCase() === 'false')) {\r\n data[key] = value.toString().toLocaleLowerCase() === 'true'\r\n }\r\n })\r\n return data\r\n}\r\n\r\nexport const trimAllStrings = <T>(obj: T): Partial<T> => {\r\n if (typeof obj === 'string') {\r\n // Don't trim color values (hex colors start with #)\r\n if (obj.startsWith('#') && /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(obj)) {\r\n return obj as any\r\n }\r\n return obj.trim() as any\r\n }\r\n\r\n if (Array.isArray(obj)) {\r\n return obj.map((item) => trimAllStrings(item)) as any\r\n }\r\n\r\n // Skip File objects to preserve file data\r\n if (obj instanceof File) {\r\n return obj as any\r\n }\r\n\r\n // Skip FileList objects (multiple file inputs)\r\n if (obj instanceof FileList) {\r\n return obj as any\r\n }\r\n\r\n // Skip Date objects to preserve date data\r\n if (obj instanceof Date) {\r\n return obj as any\r\n }\r\n\r\n // Skip numeric values, booleans, null, undefined\r\n if (typeof obj === 'number' || typeof obj === 'boolean' || obj === null || obj === undefined) {\r\n return obj as any\r\n }\r\n\r\n // Skip DOM elements\r\n if (obj instanceof HTMLElement) {\r\n return obj as any\r\n }\r\n\r\n // Skip functions\r\n if (typeof obj === 'function') {\r\n return obj as any\r\n }\r\n\r\n if (obj && typeof obj === 'object') {\r\n const result: any = {}\r\n Object.keys(obj).forEach((key) => {\r\n result[key] = trimAllStrings((obj as any)[key])\r\n })\r\n return result\r\n }\r\n return obj\r\n}\r\n\r\nexport const singleValidate = function <TModel, TPartial = TModel>(\r\n key: keyof TModel,\r\n modelState: TPartial,\r\n MessageErrors: IPartialError<TModel>,\r\n Validator: FormValidator<TPartial>\r\n) {\r\n const messageErrors = Validator.run(modelState) as { [key: string]: any }\r\n if (messageErrors) {\r\n let errors = (MessageErrors || {}) as { [key: string]: any }\r\n const keys = Object.keys(modelState as any)\r\n .filter((key) => !!(modelState as any)[key])\r\n .filter((key) => ((modelState as any)[key] instanceof File ? !!((modelState as any)[key] as File).size : false))\r\n keys.push(key as string)\r\n keys.forEach((key) => {\r\n if (messageErrors[key]) {\r\n errors[key] = messageErrors[key]\r\n } else {\r\n delete errors[key]\r\n }\r\n })\r\n return errors\r\n }\r\n return null\r\n}\r\n\r\nexport const getErrorFromResponse = function <TModel>(error: AxiosError, ModelRender: TModel) {\r\n const data = error.response?.data as any\r\n if (data) {\r\n const keys = Object.keys(ModelRender as any)\r\n const MessageErrors: IPartialError<TModel> | undefined = {}\r\n keys.forEach((key) => {\r\n const messages = data[key]\r\n if (Array.isArray(messages) && messages.length > 0) {\r\n ;(MessageErrors as any)[key] = [{ message: messages[0] }]\r\n }\r\n })\r\n return MessageErrors\r\n }\r\n}\r\n\r\nexport const clearFieldEmpty = <TModel>(model: Extract<TModel, IModelBase>) => {\r\n Object.keys(model).forEach((key: keyof Extract<TModel, IModelBase>) => {\r\n if (!model[key]) delete model[key]\r\n })\r\n}\r\n\r\nexport const validateMerge = <TModel>(...validateor: (FormValidator<TModel> | undefined)[]): FormValidator<TModel> => {\r\n const configs = validateor.map((x) => x?.configs).filter((x) => !!x)\r\n\r\n let temp: any = Object.assign({}, ...configs)\r\n\r\n for (let index = 0; index < Object.keys(temp).length; index++) {\r\n const key = Object.keys(temp)[index]\r\n //merge configs\r\n temp[key] = deepMerge({}, ...configs.map((x) => (x ? x[key] : { Rules: [] })))\r\n //merge rules\r\n temp[key].Rules = configs\r\n .map((x) => (x ? x[key] : { Rules: [] }))\r\n .reduce<IRuleOption<TModel>[]>((a, b) => {\r\n a.push(...(b?.Rules ?? []))\r\n return a\r\n }, [])\r\n }\r\n return new FormValidator(temp)\r\n}\r\n\r\n/**\r\n * Interface representing the result of a CSV validation.\r\n */\r\nexport interface IValidateCsv {\r\n /** Indicates whether the CSV data is valid */\r\n valid: boolean\r\n /** Optional message providing error details if validation fails */\r\n message?: string\r\n}\r\n\r\n/**\r\n * Validates a parsed CSV data array against a list of required column keys.\r\n *\r\n * @param data - An array of objects representing rows parsed from a CSV file.\r\n * @param requiredKeys - An array of keys that must exist in the CSV headers and each row.\r\n * @returns An object indicating whether the data is valid and an optional error message.\r\n */\r\nexport const validateCsvModel = <T extends Record<string, any>>(data: T[], requiredKeys: (keyof T)[]): IValidateCsv => {\r\n // If the data is empty, consider the file invalid\r\n if (data.length === 0) {\r\n return { valid: false, message: 'File is empty or cannot be parsed' }\r\n }\r\n\r\n // Extract headers from the first row\r\n const headers = Object.keys(data[0])\r\n\r\n // Check for missing required columns\r\n const missing = requiredKeys.filter((key) => !headers.includes(key as string))\r\n if (missing.length > 0) {\r\n return { valid: false, message: `Missing required columns: ${missing.join(', ')}` }\r\n }\r\n\r\n // Validate that each required column in each row has a non-empty string value\r\n for (let i = 0; i < data.length; i++) {\r\n const row = data[i]\r\n for (const key of requiredKeys) {\r\n const value = row[key as string]\r\n if (typeof value !== 'string' || value.trim() === '') {\r\n return {\r\n valid: false,\r\n message: `Invalid or missing value for \"${key.toString()}\" at row ${i + 2}` // +2 accounts for header and 0-based index\r\n }\r\n }\r\n }\r\n }\r\n\r\n // All validations passed\r\n return { valid: true }\r\n}\r\n"],"names":["objectAssign","model","_len","arguments","length","sources","Array","_key","filter","x","reduce","a","b","Object","assign","deepMerge","_len2","_key2","temps","concat","_toConsumableArray","fieldObjects","fields","keys","_typeof","isArray","push","apply","target","slice","temp","temp2","_loop","element","index","map","getErrorMessage","MessageErrors","key","_objectSpread","error","message","convertFormDataToJson","form","data","from","forEach","value","toString","toLocaleLowerCase","trimAllStrings","obj","startsWith","test","trim","item","File","FileList","Date","HTMLElement","result","singleValidate","modelState","Validator","messageErrors","run","errors","size","getErrorFromResponse","ModelRender","_error$response","response","messages","validateMerge","_len3","validateor","_key3","configs","_loop2","Rules","_b$Rules","FormValidator","validateCsvModel","requiredKeys","valid","headers","missing","includes","join","i","_step","row","_iterator","_createForOfIteratorHelper","s","n","done","err","e","f"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../src/form/helpers.ts"],"sourcesContent":["import { AxiosError } from 'axios'\r\nimport FormValidator, { IModelError, IRuleOption, IPartialError } from './validator'\r\n\r\ntype IAnyObject = { [key: string]: any }\r\nconst objectAssign = <T extends IAnyObject>(model: T, ...sources: (Partial<T> | undefined)[]) => {\r\n if (sources.length < 1) {\r\n return model\r\n }\r\n const temps = sources.filter((x) => x) as T[]\r\n return temps.reduce((a, b) => {\r\n a = Object.assign(a, b)\r\n return a\r\n }, model)\r\n}\r\n\r\nconst deepMerge = <T extends IAnyObject>(model: T, ...sources: (Partial<T> | undefined)[]) => {\r\n sources = sources.filter((x) => !!x)\r\n if (sources.length < 1) {\r\n return model\r\n }\r\n const temps = [model, ...sources].filter((x) => x)\r\n const fieldObjects = temps.reduce<string[]>((a, b) => {\r\n if (!b) return a\r\n const fields = Object.keys(b).filter((x) => typeof b[x] === 'object' && !Array.isArray(b[x]))\r\n a.push(...fields)\r\n return a\r\n }, [])\r\n\r\n const target = objectAssign<T>(model, ...temps.slice(1))\r\n const temp = target as any\r\n const temp2 = temps.slice(1).filter((x) => !!x) as Partial<T>[]\r\n for (let index = 0; index < fieldObjects.length; index++) {\r\n const element = fieldObjects[index]\r\n temp[element] = deepMerge({}, temp[element], ...temp2.map((x) => x[element]))\r\n }\r\n return target\r\n}\r\n\r\nexport const getErrorMessage = function <TModel>(MessageErrors: IPartialError<TModel> | undefined, key?: keyof TModel): IModelError {\r\n return MessageErrors && (MessageErrors as any)[key] ? { ...(MessageErrors as any)[key][0], error: true } : { error: false, message: '' }\r\n}\r\n\r\ntype IModelBase = {\r\n [key: string]: any\r\n}\r\n\r\nexport const convertFormDataToJson = function <TModel>(form: FormData): Partial<TModel> {\r\n const data = Array.from(form as any).reduce<Partial<TModel>>((a: unknown | any, b: any) => {\r\n if (!a[b[0]]) {\r\n a[b[0]] = b[1]\r\n } else if (Array.isArray(a[b[0]])) {\r\n a[b[0]].push(b[1])\r\n } else {\r\n a[b[0]] = [a[b[0]], b[1]]\r\n }\r\n return a\r\n }, {} as any) as any\r\n\r\n Object.keys(data).forEach((key) => {\r\n const value = data[key]\r\n if (typeof value === 'string' && (value.toString().toLocaleLowerCase() === 'true' || value.toString().toLocaleLowerCase() === 'false')) {\r\n data[key] = value.toString().toLocaleLowerCase() === 'true'\r\n }\r\n })\r\n return data\r\n}\r\n\r\nexport const trimAllStrings = <T>(obj: T): Partial<T> => {\r\n if (typeof obj === 'string') {\r\n // Don't trim color values (hex colors start with #)\r\n if (obj.startsWith('#') && /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(obj)) {\r\n return obj as any\r\n }\r\n return obj.trim() as any\r\n }\r\n\r\n if (Array.isArray(obj)) {\r\n return obj.map((item) => trimAllStrings(item)) as any\r\n }\r\n\r\n // Skip File objects to preserve file data\r\n if (obj instanceof File) {\r\n return obj as any\r\n }\r\n\r\n // Skip FileList objects (multiple file inputs)\r\n if (obj instanceof FileList) {\r\n return obj as any\r\n }\r\n\r\n // Skip Date objects to preserve date data\r\n if (obj instanceof Date) {\r\n return obj as any\r\n }\r\n\r\n // Skip numeric values, booleans, null, undefined\r\n if (typeof obj === 'number' || typeof obj === 'boolean' || obj === null || obj === undefined) {\r\n return obj as any\r\n }\r\n\r\n // Skip DOM elements\r\n if (obj instanceof HTMLElement) {\r\n return obj as any\r\n }\r\n\r\n // Skip functions\r\n if (typeof obj === 'function') {\r\n return obj as any\r\n }\r\n\r\n if (obj && typeof obj === 'object') {\r\n const result: any = {}\r\n Object.keys(obj).forEach((key) => {\r\n result[key] = trimAllStrings((obj as any)[key])\r\n })\r\n return result\r\n }\r\n return obj\r\n}\r\n\r\nexport const singleValidate = function <TModel, TPartial = TModel>(\r\n key: keyof TModel,\r\n modelState: TPartial,\r\n MessageErrors: IPartialError<TModel>,\r\n Validator: FormValidator<TPartial>\r\n) {\r\n const messageErrors = Validator.run(modelState) as { [key: string]: any }\r\n if (messageErrors) {\r\n let errors = (MessageErrors || {}) as { [key: string]: any }\r\n const keys = Object.keys(modelState as any)\r\n .filter((key) => !!(modelState as any)[key])\r\n .filter((key) => ((modelState as any)[key] instanceof File ? !!((modelState as any)[key] as File).size : false))\r\n keys.push(key as string)\r\n keys.forEach((key) => {\r\n if (messageErrors[key]) {\r\n errors[key] = messageErrors[key]\r\n } else {\r\n delete errors[key]\r\n }\r\n })\r\n return errors\r\n }\r\n return null\r\n}\r\n\r\nexport const getErrorFromResponse = function <TModel>(error: AxiosError, ModelRender: TModel) {\r\n const data = error.response?.data as any\r\n if (data) {\r\n const keys = Object.keys(ModelRender as any)\r\n const MessageErrors: IPartialError<TModel> | undefined = {}\r\n keys.forEach((key) => {\r\n const messages = data[key]\r\n if (Array.isArray(messages) && messages.length > 0) {\r\n ;(MessageErrors as any)[key] = [{ message: messages[0] }]\r\n }\r\n })\r\n return MessageErrors\r\n }\r\n}\r\n\r\nexport const clearFieldEmpty = <TModel>(model: Extract<TModel, IModelBase>) => {\r\n Object.keys(model).forEach((key: keyof Extract<TModel, IModelBase>) => {\r\n if (!model[key]) delete model[key]\r\n })\r\n}\r\n\r\nexport const validateMerge = <TModel>(...validateor: (FormValidator<TModel> | undefined)[]): FormValidator<TModel> => {\r\n const configs = validateor.map((x) => x?.configs).filter((x) => !!x)\r\n\r\n let temp: any = Object.assign({}, ...configs)\r\n\r\n for (let index = 0; index < Object.keys(temp).length; index++) {\r\n const key = Object.keys(temp)[index]\r\n //merge configs\r\n temp[key] = deepMerge({}, ...configs.map((x) => (x ? x[key] : { Rules: [] })))\r\n //merge rules\r\n temp[key].Rules = configs\r\n .map((x) => (x ? x[key] : { Rules: [] }))\r\n .reduce<IRuleOption<TModel>[]>((a, b) => {\r\n a.push(...(b?.Rules ?? []))\r\n return a\r\n }, [])\r\n }\r\n return new FormValidator(temp)\r\n}\r\n\r\n/**\r\n * Interface representing the result of a CSV validation.\r\n */\r\nexport interface IValidateCsv {\r\n /** Indicates whether the CSV data is valid */\r\n valid: boolean\r\n /** Optional message providing error details if validation fails */\r\n message?: string\r\n}\r\n\r\n/**\r\n * Validates a parsed CSV data array against a list of required column keys.\r\n *\r\n * @param data - An array of objects representing rows parsed from a CSV file.\r\n * @param requiredKeys - An array of keys that must exist in the CSV headers and each row.\r\n * @returns An object indicating whether the data is valid and an optional error message.\r\n */\r\nexport const validateCsvModel = <T extends Record<string, any>>(data: T[], requiredKeys: (keyof T)[]): IValidateCsv => {\r\n // If the data is empty, consider the file invalid\r\n if (data.length === 0) {\r\n return { valid: false, message: 'File is empty or cannot be parsed' }\r\n }\r\n\r\n // Extract headers from the first row\r\n const headers = Object.keys(data[0])\r\n\r\n // Check for missing required columns\r\n const missing = requiredKeys.filter((key) => !headers.includes(key as string))\r\n if (missing.length > 0) {\r\n return { valid: false, message: `Missing required columns: ${missing.join(', ')}` }\r\n }\r\n\r\n // Validate that each required column in each row has a non-empty string value\r\n for (let i = 0; i < data.length; i++) {\r\n const row = data[i]\r\n for (const key of requiredKeys) {\r\n const value = row[key as string]\r\n if (typeof value !== 'string' || value.trim() === '') {\r\n return {\r\n valid: false,\r\n message: `Invalid or missing value for \"${key.toString()}\" at row ${i + 2}` // +2 accounts for header and 0-based index\r\n }\r\n }\r\n }\r\n }\r\n\r\n // All validations passed\r\n return { valid: true }\r\n}\r\n"],"names":["objectAssign","model","_len","arguments","length","sources","Array","_key","filter","x","reduce","a","b","Object","assign","deepMerge","_len2","_key2","temps","concat","_toConsumableArray","fieldObjects","fields","keys","_typeof","isArray","push","apply","target","slice","temp","temp2","_loop","element","index","map","getErrorMessage","MessageErrors","key","_objectSpread","error","message","convertFormDataToJson","form","data","from","forEach","value","toString","toLocaleLowerCase","trimAllStrings","obj","startsWith","test","trim","item","File","FileList","Date","HTMLElement","result","singleValidate","modelState","Validator","messageErrors","run","errors","size","getErrorFromResponse","ModelRender","_error$response","response","messages","validateMerge","_len3","validateor","_key3","configs","_loop2","Rules","_b$Rules","FormValidator","validateCsvModel","requiredKeys","valid","headers","missing","includes","join","i","_step","row","_iterator","_createForOfIteratorHelper","s","n","done","err","e","f"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as l}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as e,jsx as i,Fragment as o}from"react/jsx-runtime";import{styled as t,Paper as r,IconButton as n,Box as a,Typography as s}from"@mui/material";import p from"@mui/icons-material/Close";import{mapGlobalModalContext as c}from"../api-context/global-modal.js";var x=function(l){return c(
|
|
1
|
+
import{defineProperty as l}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as e,jsx as i,Fragment as o}from"react/jsx-runtime";import{styled as t,Paper as r,IconButton as n,Box as a,Typography as s}from"@mui/material";import p from"@mui/icons-material/Close";import{mapGlobalModalContext as c}from"../api-context/global-modal.js";var x=function(l){return c(function(t){var r,n;return e(f,{size:l.size,className:l.fullHeight?"full-height":void 0,children:[e(m,{sx:null===(r=l.slots)||void 0===r?void 0:r.sxTopbarProps,children:[(null===(n=l.slots)||void 0===n?void 0:n.beforeTitle)&&e(o,{children:[l.slots.beforeTitle,i(a,{flex:1})]}),i(s,{component:"h3",variant:"subtitle1",sx:{mt:"2px",ml:"8px",fontWeight:700},children:l.title}),i(a,{flex:1}),i(h,{onClick:function(){l.onCloseClick&&l.onCloseClick(),t.close()},children:i(p,{})})]}),l.children]})})},f=t(r)(function(e){var i=e.theme,o=e.size;return l(l({maxHeight:"calc(100vh - 24px)",overflow:"hidden",display:"flex",flexDirection:"column",position:"relative",maxWidth:"calc(100vw - 24px)",width:i.breakpoints.values[null!=o?o:"lg"]},i.breakpoints.down("sm"),{width:"calc(100vw - 24px)"}),"&.full-height",{height:"calc(100vh - 24px)"})}),h=t(n)({flex:"0 0 auto",color:"#3c3c3c","& svg":{transition:"all 0.2s"},"&:hover svg":{color:"#ff200c"}}),m=t(a)({display:"flex",alignItems:"center",padding:"0 8px 0 8px",gap:"6px",flex:"0 0 auto",boxShadow:"rgba(145, 158, 171, 0.1) 0px 0px 2px 0px,rgba(145, 158, 171, 0.12) 0px 0px 24px -4px",height:"48px"});export{x as default};
|
|
2
2
|
//# sourceMappingURL=modal-wrapper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modal-wrapper.js","sources":["../../../src/form/modal-wrapper.tsx"],"sourcesContent":["import React, { FC, PropsWithChildren } from 'react'\r\nimport { Box, Breakpoint, IconButton, Paper, styled, SxProps, Theme, Typography } from '@mui/material'\r\nimport CloseIcon from '@mui/icons-material/Close'\r\nimport { mapGlobalModalContext } from '../api-context'\r\n\r\nexport interface IFormModalWrapperProps extends PropsWithChildren {\r\n title: string\r\n size?: Breakpoint\r\n fullHeight?: boolean\r\n onCloseClick?: () => void\r\n slots?: {\r\n sxTopbarProps?: SxProps<Theme>\r\n beforeTitle?: JSX.Element\r\n }\r\n}\r\n\r\nconst FormModalWrapper: FC<IFormModalWrapperProps> = (props) => {\r\n return mapGlobalModalContext((context) => (\r\n <Wrap size={props.size} className={props.fullHeight ? 'full-height' : undefined}>\r\n <TopBar sx={props.slots?.sxTopbarProps}>\r\n {props.slots?.beforeTitle && (\r\n <>\r\n {props.slots.beforeTitle}\r\n <Box flex={1} />\r\n </>\r\n )}\r\n <Typography component='h3' variant='subtitle1' sx={{ mt: '2px', ml: '8px', fontWeight: 700 }}>\r\n {props.title}\r\n </Typography>\r\n <Box flex={1} />\r\n <BtnClose\r\n onClick={() => {\r\n props.onCloseClick && props.onCloseClick()\r\n context.close()\r\n }}\r\n >\r\n <CloseIcon />\r\n </BtnClose>\r\n </TopBar>\r\n {props.children}\r\n </Wrap>\r\n ))\r\n}\r\nexport default FormModalWrapper\r\n\r\nconst Wrap = styled(Paper)<{ size?: Breakpoint }>(({ theme, size }) => ({\r\n maxHeight: 'calc(100vh - 24px)',\r\n overflow: 'hidden',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n position: 'relative',\r\n maxWidth: 'calc(100vw - 24px)',\r\n width: theme.breakpoints.values[size ?? 'lg'],\r\n [theme.breakpoints.down('sm')]: { width: 'calc(100vw - 24px)' },\r\n '&.full-height': {\r\n height: 'calc(100vh - 24px)'\r\n }\r\n}))\r\n\r\nconst BtnClose = styled(IconButton)({\r\n flex: '0 0 auto',\r\n color: '#3c3c3c',\r\n '& svg': { transition: 'all 0.2s' },\r\n '&:hover svg': { color: '#ff200c' }\r\n})\r\n\r\nconst TopBar = styled(Box)({\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: '0 8px 0 8px',\r\n gap: '6px',\r\n flex: '0 0 auto',\r\n boxShadow: 'rgba(145, 158, 171, 0.1) 0px 0px 2px 0px,rgba(145, 158, 171, 0.12) 0px 0px 24px -4px',\r\n height: '48px'\r\n})\r\n"],"names":["FormModalWrapper","props","mapGlobalModalContext","context","_props$slots","_props$slots2","_jsxs","Wrap","size","className","fullHeight","undefined","children","TopBar","sx","slots","sxTopbarProps","beforeTitle","_Fragment","_jsx","Box","flex","Typography","component","variant","mt","ml","fontWeight","title","BtnClose","onClick","onCloseClick","close","CloseIcon","styled","Paper","_ref","theme","_defineProperty","maxHeight","overflow","display","flexDirection","position","maxWidth","width","breakpoints","values","down","height","IconButton","color","transition","alignItems","padding","gap","boxShadow"],"mappings":"wVAgBA,IAAMA,EAA+C,SAACC,GACpD,OAAOC,
|
|
1
|
+
{"version":3,"file":"modal-wrapper.js","sources":["../../../src/form/modal-wrapper.tsx"],"sourcesContent":["import React, { FC, PropsWithChildren } from 'react'\r\nimport { Box, Breakpoint, IconButton, Paper, styled, SxProps, Theme, Typography } from '@mui/material'\r\nimport CloseIcon from '@mui/icons-material/Close'\r\nimport { mapGlobalModalContext } from '../api-context'\r\n\r\nexport interface IFormModalWrapperProps extends PropsWithChildren {\r\n title: string\r\n size?: Breakpoint\r\n fullHeight?: boolean\r\n onCloseClick?: () => void\r\n slots?: {\r\n sxTopbarProps?: SxProps<Theme>\r\n beforeTitle?: JSX.Element\r\n }\r\n}\r\n\r\nconst FormModalWrapper: FC<IFormModalWrapperProps> = (props) => {\r\n return mapGlobalModalContext((context) => (\r\n <Wrap size={props.size} className={props.fullHeight ? 'full-height' : undefined}>\r\n <TopBar sx={props.slots?.sxTopbarProps}>\r\n {props.slots?.beforeTitle && (\r\n <>\r\n {props.slots.beforeTitle}\r\n <Box flex={1} />\r\n </>\r\n )}\r\n <Typography component='h3' variant='subtitle1' sx={{ mt: '2px', ml: '8px', fontWeight: 700 }}>\r\n {props.title}\r\n </Typography>\r\n <Box flex={1} />\r\n <BtnClose\r\n onClick={() => {\r\n props.onCloseClick && props.onCloseClick()\r\n context.close()\r\n }}\r\n >\r\n <CloseIcon />\r\n </BtnClose>\r\n </TopBar>\r\n {props.children}\r\n </Wrap>\r\n ))\r\n}\r\nexport default FormModalWrapper\r\n\r\nconst Wrap = styled(Paper)<{ size?: Breakpoint }>(({ theme, size }) => ({\r\n maxHeight: 'calc(100vh - 24px)',\r\n overflow: 'hidden',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n position: 'relative',\r\n maxWidth: 'calc(100vw - 24px)',\r\n width: theme.breakpoints.values[size ?? 'lg'],\r\n [theme.breakpoints.down('sm')]: { width: 'calc(100vw - 24px)' },\r\n '&.full-height': {\r\n height: 'calc(100vh - 24px)'\r\n }\r\n}))\r\n\r\nconst BtnClose = styled(IconButton)({\r\n flex: '0 0 auto',\r\n color: '#3c3c3c',\r\n '& svg': { transition: 'all 0.2s' },\r\n '&:hover svg': { color: '#ff200c' }\r\n})\r\n\r\nconst TopBar = styled(Box)({\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: '0 8px 0 8px',\r\n gap: '6px',\r\n flex: '0 0 auto',\r\n boxShadow: 'rgba(145, 158, 171, 0.1) 0px 0px 2px 0px,rgba(145, 158, 171, 0.12) 0px 0px 24px -4px',\r\n height: '48px'\r\n})\r\n"],"names":["FormModalWrapper","props","mapGlobalModalContext","context","_props$slots","_props$slots2","_jsxs","Wrap","size","className","fullHeight","undefined","children","TopBar","sx","slots","sxTopbarProps","beforeTitle","_Fragment","_jsx","Box","flex","Typography","component","variant","mt","ml","fontWeight","title","BtnClose","onClick","onCloseClick","close","CloseIcon","styled","Paper","_ref","theme","_defineProperty","maxHeight","overflow","display","flexDirection","position","maxWidth","width","breakpoints","values","down","height","IconButton","color","transition","alignItems","padding","gap","boxShadow"],"mappings":"wVAgBA,IAAMA,EAA+C,SAACC,GACpD,OAAOC,EAAsB,SAACC,GAAO,IAAAC,EAAAC,EAAA,OACnCC,EAACC,EAAK,CAAAC,KAAMP,EAAMO,KAAMC,UAAWR,EAAMS,WAAa,mBAAgBC,EACpEC,SAAA,CAAAN,EAACO,EAAM,CAACC,GAAe,QAAbV,EAAEH,EAAMc,aAAK,IAAAX,OAAA,EAAXA,EAAaY,yBACX,QAAXX,EAAAJ,EAAMc,aAAK,IAAAV,OAAA,EAAXA,EAAaY,cACZX,EAAAY,EAAA,CAAAN,SAAA,CACGX,EAAMc,MAAME,YACbE,EAACC,EAAG,CAACC,KAAM,OAGfF,EAACG,EAAW,CAAAC,UAAU,KAAKC,QAAQ,YAAYV,GAAI,CAAEW,GAAI,MAAOC,GAAI,MAAOC,WAAY,cACpF1B,EAAM2B,QAETT,EAACC,EAAI,CAAAC,KAAM,IACXF,EAACU,EACC,CAAAC,QAAS,WACP7B,EAAM8B,cAAgB9B,EAAM8B,eAC5B5B,EAAQ6B,OACT,EAEDpB,SAAAO,EAACc,EAAS,CAAA,QAGbhC,EAAMW,WACF,EAEX,EAGML,EAAO2B,EAAOC,EAAPD,CAAqC,SAAAE,GAAA,IAAGC,EAAKD,EAALC,MAAO7B,EAAI4B,EAAJ5B,KAAI,OAAA8B,EAAAA,EAAA,CAC9DC,UAAW,qBACXC,SAAU,SACVC,QAAS,OACTC,cAAe,SACfC,SAAU,WACVC,SAAU,qBACVC,MAAOR,EAAMS,YAAYC,OAAOvC,QAAAA,EAAQ,OACvC6B,EAAMS,YAAYE,KAAK,MAAQ,CAAEH,MAAO,uBACzC,gBAAiB,CACfI,OAAQ,sBACT,GAGGpB,EAAWK,EAAOgB,EAAPhB,CAAmB,CAClCb,KAAM,WACN8B,MAAO,UACP,QAAS,CAAEC,WAAY,YACvB,cAAe,CAAED,MAAO,aAGpBtC,EAASqB,EAAOd,EAAPc,CAAY,CACzBO,QAAS,OACTY,WAAY,SACZC,QAAS,cACTC,IAAK,MACLlC,KAAM,WACNmC,UAAW,uFACXP,OAAQ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as e,createClass as r,classCallCheck as i}from"../../_virtual/_rollupPluginBabelHelpers.js";import{formatFileSize as u}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"../utils/query-param.js";var t,n;!function(e){e.Required="Required",e.Regex="Regex",e.RequiredValue="RequiredValue",e.Array="Array",e.Number="Number",e.Email="Email",e.PhoneNumber="PhoneNumber",e.Url="Url",e.File="File",e.FileRequired="FileRequired",e.Custom="Custom"}(n||(n={}));var s={Required:"The {0} is required",Regex:"The {0} is not match {1}",RequiredValue:"the {0} is not equal {1}",Array:"The {0} is not valid",Number:"{0} must be a number",Email:"The {0} is not valid",PhoneNumber:"The {0} is not valid",Url:"The {0} is not valid",File:"File size must be less than {1}",FileRequired:"The {0} is required",Custom:"Error Custom"},a=function(e,r){return r},l=r(
|
|
1
|
+
import{defineProperty as e,createClass as r,classCallCheck as i}from"../../_virtual/_rollupPluginBabelHelpers.js";import{formatFileSize as u}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"../utils/query-param.js";var t,n;!function(e){e.Required="Required",e.Regex="Regex",e.RequiredValue="RequiredValue",e.Array="Array",e.Number="Number",e.Email="Email",e.PhoneNumber="PhoneNumber",e.Url="Url",e.File="File",e.FileRequired="FileRequired",e.Custom="Custom"}(n||(n={}));var s={Required:"The {0} is required",Regex:"The {0} is not match {1}",RequiredValue:"the {0} is not equal {1}",Array:"The {0} is not valid",Number:"{0} must be a number",Email:"The {0} is not valid",PhoneNumber:"The {0} is not valid",Url:"The {0} is not valid",File:"File size must be less than {1}",FileRequired:"The {0} is required",Custom:"Error Custom"},a=function(e,r){return r},l=r(function r(t){var l=this;i(this,r),e(this,"AddRules",function(e){var r,i=l.configs[e];i||(i={Rules:[]},l.configs[e]=i);for(var u=arguments.length,t=new Array(u>1?u-1:0),n=1;n<u;n++)t[n-1]=arguments[n];return(r=i.Rules).push.apply(r,t),l}),e(this,"Required",function(e,r){return null==r||""===r}),e(this,"Regex",function(e,r,i){return!!r&&!e.Value.test(r)}),e(this,"RequiredValue",function(e,r){return!!r&&r!==e.Value}),e(this,"Custom",function(e,r,i){return"function"!=typeof e.Value||e.Value(r,i)}),e(this,"Array",function(e,r){return!!r&&("number"!=typeof e.Value||(!Array.isArray(r)||r.length<=e.Value))}),e(this,"Number",function(e,r){return!!r&&isNaN(Number(r))}),e(this,"Email",function(e,r){if(!r)return!1;return!/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(r)}),e(this,"PhoneNumber",function(e,r){if(!r)return!1;return!/^(\+?\d{1,4}[\s-]?)?((\(\d{1,4}\))|\d{1,4})[\s-]?\d{1,4}[\s-]?\d{1,9}$/.test((null!=r?r:"").trim())}),e(this,"Url",function(e,r){if(!r)return!1;try{return new URL(r),!1}catch(e){return!0}}),e(this,"File",function(e,r){if(!r)return!1;var i=a(0,e.options),u=Array.isArray(r)?r:[r];return!!i&&(!0===i.all?u.reduce(function(e,r){return e+=r.size},0)>i.maxSize:u.some(function(e){return e.size>i.maxSize}))}),e(this,"FileRequired",function(e,r){return!!(Array.isArray(r)?r:[r]).filter(function(e){return!!e}).some(function(e){return e.size<=0})}),e(this,"RenderMessage",function(e,r,i,t){if(t&&"string"==typeof t)e.message=t;else if(!e.message)switch(e.message=s[e.rule].replace("{0}",null!=i?i:r),e.rule){case n.Regex:e.message=e.message.replace("{1}",e.Value.source);break;case n.RequiredValue:var l,o;e.message=e.message.replace("{1}",null!==(l=null===(o=e.Value)||void 0===o?void 0:o.toString())&&void 0!==l?l:"");break;case n.File:var c,f,m=a(0,e.options);if(!0===(null==m?void 0:m.all))e.message="Total file size must be less than ".concat(u((null!==(c=null==m?void 0:m.maxSize)&&void 0!==c?c:0)/1024));else e.message=e.message.replace("{1}",u((null!==(f=null==m?void 0:m.maxSize)&&void 0!==f?f:0)/1024))}return e.message=e.message.replace("{0}",r),e}),e(this,"run",function(e){var r=Object.keys(l.configs),i={};return r.forEach(function(r){var u=l.configs[r];if(u){var t=l.Executed(u,e[r],e);t.length<1||(i[r]=t.map(function(e){return l.RenderMessage(e.rule,r,u.label,e.value)}))}}),i}),e(this,"Executed",function(e,r,i){return e.Rules.map(function(e){var u=l[e.rule.toString()],t=u&&u(e,r,i);return{value:t,rule:e}}).filter(function(e){return e.value})}),this.configs=t});t=l,e(l,"initial",function(e){return new t(e)});var o=function(){return new l({})};export{n as SingleRuleValidate,o as createFormValidator,l as default,a as mapRuleOptions};
|
|
2
2
|
//# sourceMappingURL=validator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sources":["../../../src/form/validator.ts"],"sourcesContent":["import { formatFileSize } from '../utils'\r\n\r\nexport type IModelBase = { [key: string]: any }\r\n\r\nexport enum SingleRuleValidate {\r\n Required = 'Required',\r\n Regex = 'Regex',\r\n RequiredValue = 'RequiredValue',\r\n Array = 'Array',\r\n Number = 'Number',\r\n Email = 'Email',\r\n PhoneNumber = 'PhoneNumber',\r\n Url = 'Url',\r\n File = 'File',\r\n FileRequired = 'FileRequired',\r\n Custom = 'Custom'\r\n}\r\n\r\nconst MessageDefault = {\r\n Required: 'The {0} is required',\r\n Regex: 'The {0} is not match {1}',\r\n RequiredValue: 'the {0} is not equal {1}',\r\n Array: 'The {0} is not valid',\r\n Number: '{0} must be a number',\r\n Email: 'The {0} is not valid',\r\n PhoneNumber: 'The {0} is not valid',\r\n Url: 'The {0} is not valid',\r\n File: 'File size must be less than {1}',\r\n FileRequired: 'The {0} is required',\r\n Custom: 'Error Custom'\r\n}\r\n\r\nexport interface IRuleOptions {\r\n File: {\r\n maxSize: number\r\n // toal size of files\r\n all?: boolean\r\n }\r\n}\r\n\r\nexport const mapRuleOptions = <TK extends keyof IRuleOptions>(key: TK, options?: IRuleOptions[TK]) => options\r\n\r\nexport interface IRuleOption<TModel = any> {\r\n rule: SingleRuleValidate\r\n message?: string\r\n Value?: RegExp | ((value: any, model: TModel) => boolean | string) | number | Array<any> | boolean\r\n options?: any\r\n}\r\n\r\nexport interface IConfigValue<TModel = any> {\r\n Rules: IRuleOption<TModel>[]\r\n label?: string\r\n}\r\n\r\nexport interface IModelError {\r\n message: string\r\n error: boolean\r\n}\r\n\r\nexport type IFormValidatorConfig<TModel> = {\r\n [key in keyof Extract<TModel, IModelBase>]?: IConfigValue<TModel>\r\n}\r\n\r\nexport type IPartialError<TModel> = {\r\n [key in keyof TModel]?: IRuleOption<TModel>[]\r\n}\r\n\r\nexport default class FormValidator<TModel> {\r\n configs: IFormValidatorConfig<TModel>\r\n constructor(configs: IFormValidatorConfig<TModel>) {\r\n this.configs = configs\r\n }\r\n\r\n static initial = <T>(configs: IFormValidatorConfig<T>) => new FormValidator(configs)\r\n\r\n AddRules = (key: keyof TModel, ...rule: IRuleOption<TModel>[]) => {\r\n let fieldConfig = this.configs[key]\r\n if (!fieldConfig) {\r\n fieldConfig = { Rules: [] }\r\n this.configs[key] = fieldConfig\r\n }\r\n fieldConfig.Rules.push(...rule)\r\n return this\r\n }\r\n\r\n Required = (RuleOption: IRuleOption, value: any) => {\r\n return value === null || value === undefined || value === ''\r\n }\r\n Regex = (RuleOption: IRuleOption, value: string, Regex: RegExp) => {\r\n if (!value) return false\r\n return !(RuleOption.Value as RegExp).test(value)\r\n }\r\n RequiredValue = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n return value !== RuleOption.Value\r\n }\r\n Custom = (RuleOption: IRuleOption, value: any, model: any) => {\r\n if (typeof RuleOption.Value === 'function') {\r\n return RuleOption.Value(value, model)\r\n }\r\n return true\r\n }\r\n Array = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n if (typeof RuleOption.Value === 'number') {\r\n return Array.isArray(value) ? value.length <= RuleOption.Value : true\r\n }\r\n return true\r\n }\r\n Number = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n return isNaN(Number(value))\r\n }\r\n Email = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/\r\n return !regex.test(value)\r\n }\r\n PhoneNumber = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n const phoneRegex = /^(\\+?\\d{1,4}[\\s-]?)?((\\(\\d{1,4}\\))|\\d{1,4})[\\s-]?\\d{1,4}[\\s-]?\\d{1,9}$/\r\n return !phoneRegex.test((value ?? '').trim())\r\n }\r\n Url = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n try {\r\n new URL(value)\r\n return false\r\n } catch (err) {\r\n return true\r\n }\r\n }\r\n File = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n const options = mapRuleOptions('File', RuleOption.options)\r\n const files: File[] = Array.isArray(value) ? value : [value]\r\n if (!options) return false\r\n if (options.all === true) {\r\n const size = files.reduce((a, b) => {\r\n a += b.size\r\n return a\r\n }, 0)\r\n return size > options.maxSize\r\n } else {\r\n return files.some((x) => x.size > options.maxSize)\r\n }\r\n }\r\n FileRequired = (RuleOption: IRuleOption, value: any) => {\r\n const files: File[] = Array.isArray(value) ? value : [value]\r\n return !!files.filter((x) => !!x).some((x) => x.size <= 0)\r\n }\r\n RenderMessage = (RuleOption: IRuleOption, key: string, label?: string, message?: string | boolean) => {\r\n if (!!message && typeof message === 'string') {\r\n RuleOption.message = message\r\n } else if (!RuleOption.message) {\r\n RuleOption.message = MessageDefault[RuleOption.rule].replace('{0}', label ?? key)\r\n switch (RuleOption.rule) {\r\n case SingleRuleValidate.Regex: {\r\n RuleOption.message = RuleOption.message.replace('{1}', (RuleOption.Value as RegExp).source)\r\n break\r\n }\r\n case SingleRuleValidate.RequiredValue: {\r\n RuleOption.message = RuleOption.message.replace('{1}', RuleOption.Value?.toString() ?? '')\r\n break\r\n }\r\n case SingleRuleValidate.File: {\r\n const options = mapRuleOptions('File', RuleOption.options)\r\n if (options?.all === true) {\r\n RuleOption.message = `Total file size must be less than ${formatFileSize((options?.maxSize ?? 0) / 1024)}`\r\n } else {\r\n RuleOption.message = RuleOption.message.replace('{1}', formatFileSize((options?.maxSize ?? 0) / 1024))\r\n }\r\n break\r\n }\r\n default:\r\n break\r\n }\r\n }\r\n RuleOption.message = RuleOption.message.replace('{0}', key)\r\n return RuleOption\r\n }\r\n run = (model: TModel) => {\r\n const keys = Object.keys(this.configs)\r\n const data: IPartialError<TModel> = {}\r\n keys.forEach((key) => {\r\n const config = this.configs[key]\r\n if (!config) return\r\n const tmp = this.Executed(config, (model as any)[key], model)\r\n if (tmp.length < 1) return\r\n ;(data as any)[key] = tmp.map((x) => this.RenderMessage(x.rule, key, config.label, x.value))\r\n })\r\n return data\r\n }\r\n Executed = (Config: IConfigValue, valueField: any, model: any) => {\r\n return Config.Rules.map((Value) => {\r\n const action = (this as any)[Value.rule.toString()]\r\n const res = action && action(Value, valueField, model)\r\n return { value: typeof res === 'boolean' ? res : (res as string), rule: Value }\r\n }).filter((x) => x.value)\r\n }\r\n}\r\n\r\nexport const createFormValidator = <TModel>() => {\r\n return new FormValidator<Partial<TModel>>({})\r\n}\r\n"],"names":["SingleRuleValidate","MessageDefault","Required","Regex","RequiredValue","Array","Number","Email","PhoneNumber","Url","File","FileRequired","Custom","mapRuleOptions","key","options","FormValidator","_createClass","configs","_this","this","_classCallCheck","_defineProperty","_fieldConfig$Rules","fieldConfig","Rules","_len","arguments","length","rule","_key","push","apply","RuleOption","value","Value","test","model","isArray","isNaN","trim","URL","err","files","all","reduce","a","b","size","maxSize","some","x","filter","label","message","replace","source","_RuleOption$Value$toS","_RuleOption$Value","toString","_options$maxSize","_options$maxSize2","concat","formatFileSize","keys","Object","data","forEach","config","tmp","Executed","map","RenderMessage","Config","valueField","action","res","_FormValidator","createFormValidator"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validator.js","sources":["../../../src/form/validator.ts"],"sourcesContent":["import { formatFileSize } from '../utils'\r\n\r\nexport type IModelBase = { [key: string]: any }\r\n\r\nexport enum SingleRuleValidate {\r\n Required = 'Required',\r\n Regex = 'Regex',\r\n RequiredValue = 'RequiredValue',\r\n Array = 'Array',\r\n Number = 'Number',\r\n Email = 'Email',\r\n PhoneNumber = 'PhoneNumber',\r\n Url = 'Url',\r\n File = 'File',\r\n FileRequired = 'FileRequired',\r\n Custom = 'Custom'\r\n}\r\n\r\nconst MessageDefault = {\r\n Required: 'The {0} is required',\r\n Regex: 'The {0} is not match {1}',\r\n RequiredValue: 'the {0} is not equal {1}',\r\n Array: 'The {0} is not valid',\r\n Number: '{0} must be a number',\r\n Email: 'The {0} is not valid',\r\n PhoneNumber: 'The {0} is not valid',\r\n Url: 'The {0} is not valid',\r\n File: 'File size must be less than {1}',\r\n FileRequired: 'The {0} is required',\r\n Custom: 'Error Custom'\r\n}\r\n\r\nexport interface IRuleOptions {\r\n File: {\r\n maxSize: number\r\n // toal size of files\r\n all?: boolean\r\n }\r\n}\r\n\r\nexport const mapRuleOptions = <TK extends keyof IRuleOptions>(key: TK, options?: IRuleOptions[TK]) => options\r\n\r\nexport interface IRuleOption<TModel = any> {\r\n rule: SingleRuleValidate\r\n message?: string\r\n Value?: RegExp | ((value: any, model: TModel) => boolean | string) | number | Array<any> | boolean\r\n options?: any\r\n}\r\n\r\nexport interface IConfigValue<TModel = any> {\r\n Rules: IRuleOption<TModel>[]\r\n label?: string\r\n}\r\n\r\nexport interface IModelError {\r\n message: string\r\n error: boolean\r\n}\r\n\r\nexport type IFormValidatorConfig<TModel> = {\r\n [key in keyof Extract<TModel, IModelBase>]?: IConfigValue<TModel>\r\n}\r\n\r\nexport type IPartialError<TModel> = {\r\n [key in keyof TModel]?: IRuleOption<TModel>[]\r\n}\r\n\r\nexport default class FormValidator<TModel> {\r\n configs: IFormValidatorConfig<TModel>\r\n constructor(configs: IFormValidatorConfig<TModel>) {\r\n this.configs = configs\r\n }\r\n\r\n static initial = <T>(configs: IFormValidatorConfig<T>) => new FormValidator(configs)\r\n\r\n AddRules = (key: keyof TModel, ...rule: IRuleOption<TModel>[]) => {\r\n let fieldConfig = this.configs[key]\r\n if (!fieldConfig) {\r\n fieldConfig = { Rules: [] }\r\n this.configs[key] = fieldConfig\r\n }\r\n fieldConfig.Rules.push(...rule)\r\n return this\r\n }\r\n\r\n Required = (RuleOption: IRuleOption, value: any) => {\r\n return value === null || value === undefined || value === ''\r\n }\r\n Regex = (RuleOption: IRuleOption, value: string, Regex: RegExp) => {\r\n if (!value) return false\r\n return !(RuleOption.Value as RegExp).test(value)\r\n }\r\n RequiredValue = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n return value !== RuleOption.Value\r\n }\r\n Custom = (RuleOption: IRuleOption, value: any, model: any) => {\r\n if (typeof RuleOption.Value === 'function') {\r\n return RuleOption.Value(value, model)\r\n }\r\n return true\r\n }\r\n Array = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n if (typeof RuleOption.Value === 'number') {\r\n return Array.isArray(value) ? value.length <= RuleOption.Value : true\r\n }\r\n return true\r\n }\r\n Number = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n return isNaN(Number(value))\r\n }\r\n Email = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/\r\n return !regex.test(value)\r\n }\r\n PhoneNumber = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n const phoneRegex = /^(\\+?\\d{1,4}[\\s-]?)?((\\(\\d{1,4}\\))|\\d{1,4})[\\s-]?\\d{1,4}[\\s-]?\\d{1,9}$/\r\n return !phoneRegex.test((value ?? '').trim())\r\n }\r\n Url = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n try {\r\n new URL(value)\r\n return false\r\n } catch (err) {\r\n return true\r\n }\r\n }\r\n File = (RuleOption: IRuleOption, value: any) => {\r\n if (!value) return false\r\n const options = mapRuleOptions('File', RuleOption.options)\r\n const files: File[] = Array.isArray(value) ? value : [value]\r\n if (!options) return false\r\n if (options.all === true) {\r\n const size = files.reduce((a, b) => {\r\n a += b.size\r\n return a\r\n }, 0)\r\n return size > options.maxSize\r\n } else {\r\n return files.some((x) => x.size > options.maxSize)\r\n }\r\n }\r\n FileRequired = (RuleOption: IRuleOption, value: any) => {\r\n const files: File[] = Array.isArray(value) ? value : [value]\r\n return !!files.filter((x) => !!x).some((x) => x.size <= 0)\r\n }\r\n RenderMessage = (RuleOption: IRuleOption, key: string, label?: string, message?: string | boolean) => {\r\n if (!!message && typeof message === 'string') {\r\n RuleOption.message = message\r\n } else if (!RuleOption.message) {\r\n RuleOption.message = MessageDefault[RuleOption.rule].replace('{0}', label ?? key)\r\n switch (RuleOption.rule) {\r\n case SingleRuleValidate.Regex: {\r\n RuleOption.message = RuleOption.message.replace('{1}', (RuleOption.Value as RegExp).source)\r\n break\r\n }\r\n case SingleRuleValidate.RequiredValue: {\r\n RuleOption.message = RuleOption.message.replace('{1}', RuleOption.Value?.toString() ?? '')\r\n break\r\n }\r\n case SingleRuleValidate.File: {\r\n const options = mapRuleOptions('File', RuleOption.options)\r\n if (options?.all === true) {\r\n RuleOption.message = `Total file size must be less than ${formatFileSize((options?.maxSize ?? 0) / 1024)}`\r\n } else {\r\n RuleOption.message = RuleOption.message.replace('{1}', formatFileSize((options?.maxSize ?? 0) / 1024))\r\n }\r\n break\r\n }\r\n default:\r\n break\r\n }\r\n }\r\n RuleOption.message = RuleOption.message.replace('{0}', key)\r\n return RuleOption\r\n }\r\n run = (model: TModel) => {\r\n const keys = Object.keys(this.configs)\r\n const data: IPartialError<TModel> = {}\r\n keys.forEach((key) => {\r\n const config = this.configs[key]\r\n if (!config) return\r\n const tmp = this.Executed(config, (model as any)[key], model)\r\n if (tmp.length < 1) return\r\n ;(data as any)[key] = tmp.map((x) => this.RenderMessage(x.rule, key, config.label, x.value))\r\n })\r\n return data\r\n }\r\n Executed = (Config: IConfigValue, valueField: any, model: any) => {\r\n return Config.Rules.map((Value) => {\r\n const action = (this as any)[Value.rule.toString()]\r\n const res = action && action(Value, valueField, model)\r\n return { value: typeof res === 'boolean' ? res : (res as string), rule: Value }\r\n }).filter((x) => x.value)\r\n }\r\n}\r\n\r\nexport const createFormValidator = <TModel>() => {\r\n return new FormValidator<Partial<TModel>>({})\r\n}\r\n"],"names":["SingleRuleValidate","MessageDefault","Required","Regex","RequiredValue","Array","Number","Email","PhoneNumber","Url","File","FileRequired","Custom","mapRuleOptions","key","options","FormValidator","_createClass","configs","_this","this","_classCallCheck","_defineProperty","_fieldConfig$Rules","fieldConfig","Rules","_len","arguments","length","rule","_key","push","apply","RuleOption","value","Value","test","model","isArray","isNaN","trim","URL","err","files","all","reduce","a","b","size","maxSize","some","x","filter","label","message","replace","source","_RuleOption$Value$toS","_RuleOption$Value","toString","_options$maxSize","_options$maxSize2","concat","formatFileSize","keys","Object","data","forEach","config","tmp","Executed","map","RenderMessage","Config","valueField","action","res","_FormValidator","createFormValidator"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{slicedToArray as r}from"../../_virtual/_rollupPluginBabelHelpers.js";import{useState as n,useEffect as o}from"react";var e=function(){var e=n(!1),i=r(e,2),l=i[0],t=i[1];return o(
|
|
1
|
+
import{slicedToArray as r}from"../../_virtual/_rollupPluginBabelHelpers.js";import{useState as n,useEffect as o}from"react";var e=function(){var e=n(!1),i=r(e,2),l=i[0],t=i[1];return o(function(){var r=function(){var r=window.scrollY>0;r!==l&&t(r)};return window.addEventListener("scroll",r),function(){return window.removeEventListener("scroll",r)}},[l]),o(function(){var r=window.scrollY>0;r!==l&&t(r)},[]),{isScrolled:l}};export{e as useCheckScrolled};
|
|
2
2
|
//# sourceMappingURL=check-scrolled.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-scrolled.js","sources":["../../../src/hooks/check-scrolled.ts"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps*/\r\nimport { useEffect, useState } from 'react'\r\n\r\nexport const useCheckScrolled = () => {\r\n const [isScrolled, setIsScrolled] = useState(false)\r\n\r\n useEffect(() => {\r\n const handleScroll = () => {\r\n const scrolled = window.scrollY > 0\r\n if (scrolled !== isScrolled) setIsScrolled(scrolled)\r\n }\r\n\r\n window.addEventListener('scroll', handleScroll)\r\n return () => window.removeEventListener('scroll', handleScroll)\r\n }, [isScrolled])\r\n\r\n useEffect(() => {\r\n const scrolled = window.scrollY > 0\r\n if (scrolled !== isScrolled) setIsScrolled(scrolled)\r\n }, [])\r\n\r\n return { isScrolled }\r\n}\r\n"],"names":["useCheckScrolled","_useState","useState","_useState2","_slicedToArray","isScrolled","setIsScrolled","useEffect","handleScroll","scrolled","window","scrollY","addEventListener","removeEventListener"],"mappings":"gIAGaA,EAAmB,WAC9B,IAAAC,EAAoCC,GAAS,GAAMC,EAAAC,EAAAH,EAAA,GAA5CI,EAAUF,EAAA,GAAEG,EAAaH,EAAA,GAiBhC,OAfAI,
|
|
1
|
+
{"version":3,"file":"check-scrolled.js","sources":["../../../src/hooks/check-scrolled.ts"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps*/\r\nimport { useEffect, useState } from 'react'\r\n\r\nexport const useCheckScrolled = () => {\r\n const [isScrolled, setIsScrolled] = useState(false)\r\n\r\n useEffect(() => {\r\n const handleScroll = () => {\r\n const scrolled = window.scrollY > 0\r\n if (scrolled !== isScrolled) setIsScrolled(scrolled)\r\n }\r\n\r\n window.addEventListener('scroll', handleScroll)\r\n return () => window.removeEventListener('scroll', handleScroll)\r\n }, [isScrolled])\r\n\r\n useEffect(() => {\r\n const scrolled = window.scrollY > 0\r\n if (scrolled !== isScrolled) setIsScrolled(scrolled)\r\n }, [])\r\n\r\n return { isScrolled }\r\n}\r\n"],"names":["useCheckScrolled","_useState","useState","_useState2","_slicedToArray","isScrolled","setIsScrolled","useEffect","handleScroll","scrolled","window","scrollY","addEventListener","removeEventListener"],"mappings":"gIAGaA,EAAmB,WAC9B,IAAAC,EAAoCC,GAAS,GAAMC,EAAAC,EAAAH,EAAA,GAA5CI,EAAUF,EAAA,GAAEG,EAAaH,EAAA,GAiBhC,OAfAI,EAAU,WACR,IAAMC,EAAe,WACnB,IAAMC,EAAWC,OAAOC,QAAU,EAC9BF,IAAaJ,GAAYC,EAAcG,EAC5C,EAGD,OADAC,OAAOE,iBAAiB,SAAUJ,GAC3B,WAAA,OAAME,OAAOG,oBAAoB,SAAUL,EAAa,CACjE,EAAG,CAACH,IAEJE,EAAU,WACR,IAAME,EAAWC,OAAOC,QAAU,EAC9BF,IAAaJ,GAAYC,EAAcG,EAC5C,EAAE,IAEI,CAAEJ,WAAAA,EACX"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{slicedToArray as r}from"../../_virtual/_rollupPluginBabelHelpers.js";import{useState as t,useEffect as o}from"react";var e=function(e,i){var n=t(e),u=r(n,2),a=u[0],l=u[1];return o(
|
|
1
|
+
import{slicedToArray as r}from"../../_virtual/_rollupPluginBabelHelpers.js";import{useState as t,useEffect as o}from"react";var e=function(e,i){var n=t(e),u=r(n,2),a=u[0],l=u[1];return o(function(){if(!(i<=0)){var r=setTimeout(function(){l(e)},i);return function(){clearTimeout(r)}}l(e)},[e,i]),a};export{e as useDebounce};
|
|
2
2
|
//# sourceMappingURL=debounce.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debounce.js","sources":["../../../src/hooks/debounce.ts"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps*/\r\nimport { useEffect, useState } from 'react'\r\n\r\nexport const useDebounce = <T>(value: T, delay: number): T => {\r\n const [debouncedValue, setDebouncedValue] = useState<T>(value)\r\n\r\n useEffect(() => {\r\n if (delay <= 0) {\r\n setDebouncedValue(value)\r\n return\r\n }\r\n\r\n const handler = setTimeout(() => {\r\n setDebouncedValue(value)\r\n }, delay)\r\n\r\n return () => {\r\n clearTimeout(handler)\r\n }\r\n }, [value, delay])\r\n\r\n return debouncedValue\r\n}\r\n"],"names":["useDebounce","value","delay","_useState","useState","_useState2","_slicedToArray","debouncedValue","setDebouncedValue","useEffect","handler","setTimeout","clearTimeout"],"mappings":"4HAGO,IAAMA,EAAc,SAAIC,EAAUC,GACvC,IAAAC,EAA4CC,EAAYH,GAAMI,EAAAC,EAAAH,EAAA,GAAvDI,EAAcF,EAAA,GAAEG,EAAiBH,EAAA,GAiBxC,OAfAI,
|
|
1
|
+
{"version":3,"file":"debounce.js","sources":["../../../src/hooks/debounce.ts"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps*/\r\nimport { useEffect, useState } from 'react'\r\n\r\nexport const useDebounce = <T>(value: T, delay: number): T => {\r\n const [debouncedValue, setDebouncedValue] = useState<T>(value)\r\n\r\n useEffect(() => {\r\n if (delay <= 0) {\r\n setDebouncedValue(value)\r\n return\r\n }\r\n\r\n const handler = setTimeout(() => {\r\n setDebouncedValue(value)\r\n }, delay)\r\n\r\n return () => {\r\n clearTimeout(handler)\r\n }\r\n }, [value, delay])\r\n\r\n return debouncedValue\r\n}\r\n"],"names":["useDebounce","value","delay","_useState","useState","_useState2","_slicedToArray","debouncedValue","setDebouncedValue","useEffect","handler","setTimeout","clearTimeout"],"mappings":"4HAGO,IAAMA,EAAc,SAAIC,EAAUC,GACvC,IAAAC,EAA4CC,EAAYH,GAAMI,EAAAC,EAAAH,EAAA,GAAvDI,EAAcF,EAAA,GAAEG,EAAiBH,EAAA,GAiBxC,OAfAI,EAAU,WACR,KAAIP,GAAS,GAAb,CAKA,IAAMQ,EAAUC,WAAW,WACzBH,EAAkBP,EACnB,EAAEC,GAEH,OAAO,WACLU,aAAaF,EACd,CARA,CAFCF,EAAkBP,EAWtB,EAAG,CAACA,EAAOC,IAEJK,CACT"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{slicedToArray as r,asyncToGenerator as n,regenerator as o}from"../../_virtual/_rollupPluginBabelHelpers.js";import{useState as
|
|
1
|
+
import{slicedToArray as r,asyncToGenerator as n,regenerator as o}from"../../_virtual/_rollupPluginBabelHelpers.js";import{useState as a,useRef as t,useCallback as e,useEffect as l}from"react";var u=function(r,n){var o,a=r instanceof Error&&("AbortError"===r.name||"CanceledError"===r.name);return(!a||null!=n&&n.logAll)&&console.log(null!==(o=null==n?void 0:n.message)&&void 0!==o?o:"Error fetching data:",r),{isAbortError:a}};function i(i){var c=a(),s=r(c,2),f=s[0],v=s[1],p=a(!0),b=r(p,2),g=b[0],d=b[1],m=t(null),A=e(function(){var r=n(o().m(function r(n){var a,t,e;return o().w(function(r){for(;;)switch(r.p=r.n){case 0:return r.p=0,d(!0),r.n=1,i(n);case 1:a=r.v,v(a),d(!1),r.n=3;break;case 2:r.p=2,e=r.v,t=u(e),t.isAbortError||d(!1);case 3:return r.a(2)}},r,null,[[0,2]])}));return function(n){return r.apply(this,arguments)}}(),[i]);return l(function(){var r=m.current;r&&!r.signal.aborted&&r.abort();var n=new AbortController;return m.current=n,A(n.signal),function(){var r=m.current;r&&r.abort()}},[]),{data:f,loading:g}}export{u as errorMessageHandler,i as useFetchData};
|
|
2
2
|
//# sourceMappingURL=use-fetch-data.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-fetch-data.js","sources":["../../../src/hooks/use-fetch-data.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any*/\r\nimport { useCallback, useEffect, useRef, useState } from 'react'\r\n\r\nexport const errorMessageHandler = (error: any, options?: { message?: string; logAll?: boolean }) => {\r\n const isAbortError = error instanceof Error && (error.name === 'AbortError' || error.name === 'CanceledError')\r\n if (!isAbortError || options?.logAll) console.log(options?.message ?? 'Error fetching data:', error)\r\n return { isAbortError }\r\n}\r\n\r\nexport type FetcherFunction<T> = (signal?: AbortSignal) => Promise<T>\r\n\r\nexport function useFetchData<T, F extends FetcherFunction<T>>(fetcher: F) {\r\n type DataType = Awaited<ReturnType<F>>\r\n const [data, setData] = useState<DataType>()\r\n const [loading, setLoading] = useState<boolean>(true)\r\n const abortController = useRef<AbortController | null>(null)\r\n\r\n const fetchTableData = useCallback(\r\n async (signal?: AbortSignal) => {\r\n try {\r\n setLoading(true)\r\n const res = await fetcher(signal)\r\n setData(res as DataType)\r\n setLoading(false)\r\n } catch (error) {\r\n const { isAbortError } = errorMessageHandler(error)\r\n if (!isAbortError) setLoading(false)\r\n }\r\n },\r\n [fetcher]\r\n )\r\n\r\n useEffect(() => {\r\n
|
|
1
|
+
{"version":3,"file":"use-fetch-data.js","sources":["../../../src/hooks/use-fetch-data.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any*/\r\nimport { useCallback, useEffect, useRef, useState } from 'react'\r\n\r\nexport const errorMessageHandler = (error: any, options?: { message?: string; logAll?: boolean }) => {\r\n const isAbortError = error instanceof Error && (error.name === 'AbortError' || error.name === 'CanceledError')\r\n if (!isAbortError || options?.logAll) console.log(options?.message ?? 'Error fetching data:', error)\r\n return { isAbortError }\r\n}\r\n\r\nexport type FetcherFunction<T> = (signal?: AbortSignal) => Promise<T>\r\n\r\nexport function useFetchData<T, F extends FetcherFunction<T>>(fetcher: F) {\r\n type DataType = Awaited<ReturnType<F>>\r\n const [data, setData] = useState<DataType>()\r\n const [loading, setLoading] = useState<boolean>(true)\r\n const abortController = useRef<AbortController | null>(null)\r\n\r\n const fetchTableData = useCallback(\r\n async (signal?: AbortSignal) => {\r\n try {\r\n setLoading(true)\r\n const res = await fetcher(signal)\r\n setData(res as DataType)\r\n setLoading(false)\r\n } catch (error) {\r\n const { isAbortError } = errorMessageHandler(error)\r\n if (!isAbortError) setLoading(false)\r\n }\r\n },\r\n [fetcher]\r\n )\r\n\r\n useEffect(() => {\r\n const current = abortController.current\r\n if (current && !current.signal.aborted) {\r\n current.abort()\r\n }\r\n\r\n const newController = new AbortController()\r\n abortController.current = newController\r\n fetchTableData(newController.signal)\r\n return () => {\r\n const cur = abortController.current\r\n if (cur) cur.abort()\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n return { data, loading }\r\n}\r\n"],"names":["errorMessageHandler","error","options","_options$message","isAbortError","Error","name","logAll","console","log","message","useFetchData","fetcher","_useState","useState","_useState2","_slicedToArray","data","setData","_useState3","_useState4","loading","setLoading","abortController","useRef","fetchTableData","useCallback","_ref","_asyncToGenerator","_regenerator","m","_callee","signal","res","_errorMessageHandler","_t","w","_context","p","n","v","a","_x","apply","this","arguments","useEffect","current","aborted","abort","newController","AbortController","cur"],"mappings":"gMAGO,IAAMA,EAAsB,SAACC,EAAYC,GAAoD,IAAAC,EAC5FC,EAAeH,aAAiBI,QAAyB,eAAfJ,EAAMK,MAAwC,kBAAfL,EAAMK,MAErF,QADKF,GAAgBF,SAAAA,EAASK,SAAQC,QAAQC,IAAoB,QAAjBN,EAACD,aAAAA,EAAAA,EAASQ,eAAO,IAAAP,EAAAA,EAAI,uBAAwBF,GACvF,CAAEG,aAAAA,EACX,EAIM,SAAUO,EAA8CC,GAE5D,IAAAC,EAAwBC,IAAoBC,EAAAC,EAAAH,EAAA,GAArCI,EAAIF,EAAA,GAAEG,EAAOH,EAAA,GACpBI,EAA8BL,GAAkB,GAAKM,EAAAJ,EAAAG,EAAA,GAA9CE,EAAOD,EAAA,GAAEE,EAAUF,EAAA,GACpBG,EAAkBC,EAA+B,MAEjDC,EAAiBC,EAAW,WAAA,IAAAC,EAAAC,EAAAC,IAAAC,EAChC,SAAAC,EAAOC,GAAoB,IAAAC,EAAAC,EAAAC,EAAA,OAAAN,IAAAO,EAAA,SAAAC,GAAA,cAAAA,EAAAC,EAAAD,EAAAE,GAAA,KAAA,EAEP,OAFOF,EAAAC,EAAA,EAEvBhB,GAAW,GAAKe,EAAAE,EAAA,EACE3B,EAAQoB,GAAO,KAAA,EAA3BC,EAAGI,EAAAG,EACTtB,EAAQe,GACRX,GAAW,GAAMe,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAC,EAAA,EAAAH,EAAAE,EAAAG,EAAAN,EAEQlC,EAAmBmC,GAAxBD,EAAZ9B,cACWkB,GAAW,GAAM,KAAA,EAAA,OAAAe,EAAAI,EAAA,GAAA,EAAAV,EAAA,KAAA,CAAA,CAAA,EAAA,QAEvC,OAAA,SAAAW,GAAA,OAAAf,EAAAgB,MAAAC,KAAAC,UAAA,EAX+B,GAYhC,CAACjC,IAmBH,OAhBAkC,EAAU,WACR,IAAMC,EAAUxB,EAAgBwB,QAC5BA,IAAYA,EAAQf,OAAOgB,SAC7BD,EAAQE,QAGV,IAAMC,EAAgB,IAAIC,gBAG1B,OAFA5B,EAAgBwB,QAAUG,EAC1BzB,EAAeyB,EAAclB,QACtB,WACL,IAAMoB,EAAM7B,EAAgBwB,QACxBK,GAAKA,EAAIH,OACd,CAEF,EAAE,IAEI,CAAEhC,KAAAA,EAAMI,QAAAA,EACjB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{inherits as
|
|
1
|
+
import{inherits as r,createClass as n,classCallCheck as t,callSuper as e,defineProperty as a,asyncToGenerator as u,regenerator as s}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{resolveBaseUrl as i,fetchDelay as o}from"./helpers.js";import{createHttpService as c}from"./gateway.js";import l from"./service-base.js";var f=function(){function f(r){var n;return t(this,f),n=e(this,f,[c(i(r))]),a(n,"all",function(r,t,e){var a;return o(u(s().m(function e(){var a;return s().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,n.tryPushNotify(n.post,"All",r,{headers:{"Content-Type":"application/json"},signal:t});case 1:return a=e.v,e.a(2,a)}},e)})),null!==(a=null==e?void 0:e.delay)&&void 0!==a?a:500)}),a(n,"single",function(r,t){return o(u(s().m(function e(){var a;return s().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,n.tryGet("Get",{params:{Id:r},signal:t});case 1:return a=e.v,e.a(2,a)}},e)})),500)}),a(n,"create",function(r,t,e){var a;return o(u(s().m(function e(){var a;return s().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,n.pushNotify(n.post,"Create",r,{signal:t});case 1:return a=e.v,e.a(2,a)}},e)})),null!==(a=null==e?void 0:e.delay)&&void 0!==a?a:500)}),a(n,"update",function(r,t,e){return o(u(s().m(function a(){var u;return s().w(function(a){for(;;)switch(a.n){case 0:return a.n=1,n.pushNotify(n.put,"Update",t,{signal:e,params:{Id:r}});case 1:return u=a.v,a.a(2,u)}},a)})),500)}),a(n,"updatePatch",function(r,t,e){return o(u(s().m(function a(){var u;return s().w(function(a){for(;;)switch(a.n){case 0:return a.n=1,n.pushNotify(n.patch,"Patch",t,{signal:e,params:{Id:r}});case 1:return u=a.v,a.a(2,u)}},a)})),500)}),a(n,"remove",function(r,t){return o(u(s().m(function e(){var a;return s().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,n.pushNotify(n.delete,"Delete",{params:{Id:r},signal:t});case 1:return a=e.v,e.a(2,a)}},e)})),500)}),n}return r(f,l),n(f)}();export{f as default};
|
|
2
2
|
//# sourceMappingURL=crud-service-base.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crud-service-base.js","sources":["../../../../src/http-service/base/crud-service-base.ts"],"sourcesContent":["import { fetchDelay } from './helpers'\r\nimport { createHttpService } from './gateway'\r\nimport type { IFilterModelSwagger, IReponseAll } from './types'\r\nimport ServiceBase from './service-base'\r\n\r\n/**\r\n * Base class for HTTP CRUD services.\r\n *\r\n * @template T - Entity type.\r\n * @template K - Entity ID type.\r\n *\r\n * Provides common methods:\r\n * - all: Get list with filter and pagination\r\n * - single: Get detail by ID\r\n * - create: Add new entity\r\n * - update: Update entity by ID\r\n * - remove: Delete entity by ID\r\n *\r\n * Supports request cancellation and artificial delay.\r\n */\r\nclass CRUDServiceBase<T, K> extends ServiceBase {\r\n constructor(baseUri: string) {\r\n super(createHttpService(
|
|
1
|
+
{"version":3,"file":"crud-service-base.js","sources":["../../../../src/http-service/base/crud-service-base.ts"],"sourcesContent":["import { fetchDelay, resolveBaseUrl } from './helpers'\r\nimport { createHttpService } from './gateway'\r\nimport type { IFilterModelSwagger, IReponseAll } from './types'\r\nimport ServiceBase from './service-base'\r\n\r\n/**\r\n * Base class for HTTP CRUD services.\r\n *\r\n * @template T - Entity type.\r\n * @template K - Entity ID type.\r\n *\r\n * Provides common methods:\r\n * - all: Get list with filter and pagination\r\n * - single: Get detail by ID\r\n * - create: Add new entity\r\n * - update: Update entity by ID\r\n * - remove: Delete entity by ID\r\n *\r\n * Supports request cancellation and artificial delay.\r\n */\r\nclass CRUDServiceBase<T, K> extends ServiceBase {\r\n constructor(baseUri: string) {\r\n super(createHttpService(resolveBaseUrl(baseUri)))\r\n }\r\n /**\r\n * Fetches a list of entities with optional filters and pagination.\r\n *\r\n * @param filters - Filters and pagination options.\r\n * @param signal - Optional AbortSignal for request cancellation.\r\n * @param options - Optional delay configuration.\r\n * @returns A promise resolving to the response containing the list of entities.\r\n */\r\n all = (filters: Partial<IFilterModelSwagger<T>>, signal?: AbortSignal, options?: { delay?: number }) => {\r\n return fetchDelay(async () => {\r\n const data = await this.tryPushNotify(this.post<IReponseAll<T>>, 'All', filters, {\r\n headers: { 'Content-Type': 'application/json' },\r\n signal\r\n })\r\n return data\r\n }, options?.delay ?? 500)\r\n }\r\n /**\r\n * Fetches a single entity by its ID.\r\n *\r\n * @param id - The ID of the entity to fetch.\r\n * @param signal - Optional AbortSignal for request cancellation.\r\n * @returns A promise resolving to the entity data.\r\n */\r\n single = (id: K, signal?: AbortSignal) => {\r\n return fetchDelay(async () => {\r\n const data = await this.tryGet<T>('Get', { params: { Id: id }, signal })\r\n return data\r\n }, 500)\r\n }\r\n /**\r\n * Creates a new entity.\r\n *\r\n * @param model - The entity data to create.\r\n * @param signal - Optional AbortSignal for request cancellation.\r\n * @param options - Optional delay configuration.\r\n * @returns A promise resolving to the created entity data.\r\n */\r\n create = (model: Partial<T>, signal?: AbortSignal, options?: { delay?: number }) => {\r\n return fetchDelay(async () => {\r\n const data = await this.pushNotify(this.post<T>, 'Create', model, { signal })\r\n return data\r\n }, options?.delay ?? 500)\r\n }\r\n /**\r\n * Updates an existing entity by its ID.\r\n *\r\n * @param id - The ID of the entity to update.\r\n * @param model - The partial entity data to update.\r\n * @param signal - Optional AbortSignal for request cancellation.\r\n * @returns A promise resolving to the updated entity data.\r\n */\r\n update = (id: K, model: Partial<T>, signal?: AbortSignal) => {\r\n return fetchDelay(async () => {\r\n const data = await this.pushNotify(this.put<T>, 'Update', model, { signal, params: { Id: id } })\r\n return data\r\n }, 500)\r\n }\r\n /**\r\n * HTTP PATCH request with automatic authentication\r\n *\r\n * @param id - The ID of the entity to update.\r\n * @param model - The partial entity data to update.\r\n * @param signal - Optional AbortSignal for request cancellation.\r\n * @returns A promise resolving to the updated entity data.\r\n */\r\n updatePatch = (id: K, model: Partial<T>, signal?: AbortSignal) => {\r\n return fetchDelay(async () => {\r\n const data = await this.pushNotify(this.patch<T>, 'Patch', model, { signal, params: { Id: id } })\r\n return data\r\n }, 500)\r\n }\r\n /**\r\n * Deletes an entity by its ID.\r\n *\r\n * @param id - The ID of the entity to delete.\r\n * @param signal - Optional AbortSignal for request cancellation.\r\n * @returns A promise resolving to the deletion response.\r\n */\r\n remove = (id: K, signal?: AbortSignal) => {\r\n return fetchDelay(async () => {\r\n const data = await this.pushNotify(this.delete<T>, 'Delete', { params: { Id: id }, signal })\r\n return data\r\n }, 500)\r\n }\r\n}\r\n\r\nexport default CRUDServiceBase\r\n"],"names":["CRUDServiceBase","baseUri","_this","_classCallCheck","_callSuper","this","createHttpService","resolveBaseUrl","_defineProperty","filters","signal","options","_options$delay","fetchDelay","_asyncToGenerator","_regenerator","m","_callee","data","w","_context","n","tryPushNotify","post","headers","v","a","delay","id","_callee2","_context2","tryGet","params","Id","model","_options$delay2","_callee3","_context3","pushNotify","_callee4","_context4","put","_callee5","_context5","patch","_callee6","_context6","_inherits","ServiceBase","_createClass"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{asyncToGenerator as r,regenerator as
|
|
1
|
+
import{asyncToGenerator as r,regenerator as n,slicedToArray as e}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{authService as o,ApplicationPaths as t}from"partner-oidc-auth";var i=globalThis.ApiAlertContext;"development"===process.env.NODE_ENV&&(globalThis.authService=o);var u=function(r){return new Promise(function(n){return setTimeout(n,r)})},a=function(){var o=r(n().m(function r(o,t){var i,a,s;return n().w(function(r){for(;;)switch(r.n){case 0:return r.n=1,Promise.all([o(),u(t)]);case 1:return i=r.v,a=e(i,1),s=a[0],r.a(2,s)}},r)}));return function(r,n){return o.apply(this,arguments)}}(),s=function(r){var n=process.env.APP_API_URL||window.location.origin||"";if(!r)return n;try{return new URL(r),r}catch(e){return"".concat(n).concat(r)}},l=function(r){var n,e,o,t,u,a=Object.values(null!==(n=null!==(e=null===(o=r.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.errors)&&void 0!==e?e:null===(t=r.response)||void 0===t?void 0:t.data)&&void 0!==n?n:{}).filter(function(r){return r.length>0}).map(function(r){return r[0]});a.length<1||null==i||null===(u=i.ApiAlert)||void 0===u||u.PushError(a.join("\n"))},c=function(){var e=r(n().m(function r(e){var u,a,s,l,c,d,v,p,f,h;return n().w(function(r){for(;;)switch(r.n){case 0:if(403!==(null===(u=e.response)||void 0===u?void 0:u.status)){r.n=7;break}d=e.response.data,h=d.Code,r.n=3===h?1:1===h?3:5;break;case 1:return r.n=2,o.signOut({returnUrl:o.getReturnUrl()});case 2:return r.a(3,6);case 3:return r.n=4,null===(v=o.userManager)||void 0===v?void 0:v.revokeTokens(["access_token"]);case 4:return window.location.replace(t.Origin("")),r.a(3,6);case 5:return window.location.replace(t.Origin(t.IdentityAccessDenied)),r.a(3,6);case 6:r.n=8;break;case 7:401===(null===(a=e.response)||void 0===a?void 0:a.status)||"ERR_CANCELED"===e.code||((null!==(s=null===(l=e.response)||void 0===l?void 0:l.status)&&void 0!==s?s:500)>=500?"ERR_CANCELED"!==e.code&&(null==i||null===(p=i.ApiAlert)||void 0===p||p.PushError("An error has occurred!")):404===(null===(c=e.response)||void 0===c?void 0:c.status)&&(null==i||null===(f=i.ApiAlert)||void 0===f||f.PushError("Resource not found!")));case 8:return r.a(2,Promise.reject(e))}},r)}));return function(r){return e.apply(this,arguments)}}();export{i as ApiAlertContext,a as fetchDelay,c as handleResponseError,l as processError,s as resolveBaseUrl,u as sleep};
|
|
2
2
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../../../../src/http-service/base/helpers.ts"],"sourcesContent":["import { AxiosError } from 'axios'\r\nimport { ApplicationPaths, authService } from 'partner-oidc-auth'\r\nimport type { IApiContext } from './type.api-alert'\r\n\r\nexport const ApiAlertContext = (globalThis as any).ApiAlertContext as IApiContext | undefined\r\n\r\nif (process.env.NODE_ENV === 'development') {\r\n ;(globalThis as any).authService = authService\r\n}\r\n\r\nexport const sleep = (sec: number) => new Promise((res) => setTimeout(res, sec))\r\n\r\nexport const fetchDelay = async function <TModel>(action: () => Promise<TModel>, sec: number) {\r\n const [res] = await Promise.all([action(), sleep(sec)])\r\n return res\r\n}\r\n\r\ninterface ErrorModel {\r\n [key: string]: string[]\r\n}\r\n\r\n/**\r\n * Processes axios errors and displays error messages to the user\r\n * @param err - The axios error containing response data\r\n */\r\nexport const processError = (err: AxiosError<ErrorModel>) => {\r\n const errorMessages = Object.values(err.response?.data?.errors ?? err.response?.data ?? {})\r\n .filter((x) => x.length > 0)\r\n .map((x) => x[0])\r\n if (errorMessages.length < 1) return\r\n ApiAlertContext?.ApiAlert?.PushError(errorMessages.join('\\n'))\r\n}\r\n\r\n/**\r\n * Checks if the current user's token is expired.\r\n * @returns {Promise<boolean>} True if token is expired or user not logged in, false otherwise.\r\n */\r\nexport const checkTokenExpiry = async () => {\r\n try {\r\n const user = await authService.getUser()\r\n if (!user) {\r\n console.log('No user is currently logged in.')\r\n return true\r\n }\r\n\r\n const now = Math.floor(Date.now() / 1000) // Current time in seconds since epoch\r\n const expiresIn = user.exp - now\r\n\r\n if (expiresIn <= 0) {\r\n console.log('The token has expired.')\r\n return true\r\n } else {\r\n console.log(`The token will expire in ${expiresIn} seconds.`)\r\n return false\r\n }\r\n } catch (error) {\r\n console.error('Error checking token expiry:', error)\r\n return true\r\n }\r\n}\r\n/**\r\n * Refreshes the token once if at least 4 seconds have passed since the last refresh.\r\n * Uses localStorage key 'ltt' to track last refresh time.\r\n */\r\nexport const refreshTokenOnce = async () => {\r\n const timeStamp = new Date().getTime() - parseInt(localStorage.getItem('ltt') ?? '0')\r\n localStorage.setItem('ltt', new Date().getTime().toString())\r\n if (timeStamp >= 4000) {\r\n try {\r\n await authService.ensureUserManagerInitialized()\r\n await authService.signIn({})\r\n } catch (e) {\r\n console.log(e)\r\n }\r\n }\r\n}\r\n/**\r\n * Handles errors from Axios HTTP responses.\r\n * Redirects or signs out user based on error code and status.\r\n * @param {AxiosError} err - The error object from Axios.\r\n * @returns {Promise<never>} Always rejects with the error.\r\n */\r\nexport const handleResponseError = async (err: AxiosError) => {\r\n if (err.response?.status === 403) {\r\n const dataError: { Code: number; Message: string } = err.response.data as any\r\n switch (dataError.Code) {\r\n case 3: {\r\n await authService.signOut({ returnUrl: authService.getReturnUrl() })\r\n break\r\n }\r\n case 1: {\r\n await authService.userManager?.revokeTokens(['access_token'])\r\n window.location.replace(ApplicationPaths.Origin(''))\r\n break\r\n }\r\n default: {\r\n window.location.replace(ApplicationPaths.Origin(ApplicationPaths.IdentityAccessDenied))\r\n break\r\n }\r\n }\r\n } else if (err.response?.status === 401) {\r\n } else if (err.code === 'ERR_CANCELED') {\r\n } else if ((err.response?.status ?? 500) >= 500) {\r\n if (err.code !== 'ERR_CANCELED') {\r\n ApiAlertContext?.ApiAlert?.PushError('An error has occurred!')\r\n }\r\n } else if (err.response?.status === 404) {\r\n ApiAlertContext?.ApiAlert?.PushError('Resource not found!')\r\n }\r\n return Promise.reject(err)\r\n}\r\n"],"names":["ApiAlertContext","globalThis","process","env","NODE_ENV","authService","sleep","sec","Promise","res","setTimeout","fetchDelay","_ref","_asyncToGenerator","_regenerator","m","_callee","action","_yield$Promise$all","_yield$Promise$all2","w","_context","n","all","v","_slicedToArray","a","_x","_x2","apply","this","arguments","processError","err","_ref2","_err$response$data$er","_err$response","_err$response2","_ApiAlertContext$ApiA","errorMessages","Object","values","response","data","errors","filter","x","length","map","ApiAlert","PushError","join","handleResponseError","_ref5","_callee4","_err$response3","_err$response4","_err$response$status","_err$response5","_err$response6","dataError","_authService$userMana","_ApiAlertContext$ApiA2","_ApiAlertContext$ApiA3","_t3","_context4","status","Code","signOut","returnUrl","getReturnUrl","userManager","revokeTokens","
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../../src/http-service/base/helpers.ts"],"sourcesContent":["import { AxiosError } from 'axios'\r\nimport { ApplicationPaths, authService } from 'partner-oidc-auth'\r\nimport type { IApiContext } from './type.api-alert'\r\n\r\nexport const ApiAlertContext = (globalThis as any).ApiAlertContext as IApiContext | undefined\r\n\r\nif (process.env.NODE_ENV === 'development') {\r\n ;(globalThis as any).authService = authService\r\n}\r\n\r\nexport const sleep = (sec: number) => new Promise((res) => setTimeout(res, sec))\r\n\r\nexport const fetchDelay = async function <TModel>(action: () => Promise<TModel>, sec: number) {\r\n const [res] = await Promise.all([action(), sleep(sec)])\r\n return res\r\n}\r\n\r\n/**\r\n * Resolves a base URL string into a full base URL.\r\n * - If `baseUri` is already a full URL, it is returned as-is.\r\n * - Otherwise it is prefixed with `REACT_APP_ADMIN_API` or `window.location.origin`.\r\n *\r\n * This lets callers pass either a full URL (e.g. `https://api.example.com/v1`) or\r\n * a path suffix (e.g. `/api/v1`) and get a proper base URL for the HTTP client.\r\n */\r\nexport const resolveBaseUrl = (baseUri: string) => {\r\n const prefix = process.env.APP_API_URL || window.location.origin || ''\r\n if (!baseUri) return prefix\r\n try {\r\n // new URL will succeed for absolute URLs like \"https://...\" or \"http://...\".\r\n // If it parses, treat it as a full URL and return as-is.\r\n new URL(baseUri)\r\n return baseUri\r\n } catch {\r\n // For relative paths, prefix with configured API base or current origin.\r\n return `${prefix}${baseUri}`\r\n }\r\n}\r\n\r\ninterface ErrorModel {\r\n [key: string]: string[]\r\n}\r\n\r\n/**\r\n * Processes axios errors and displays error messages to the user\r\n * @param err - The axios error containing response data\r\n */\r\nexport const processError = (err: AxiosError<ErrorModel>) => {\r\n const errorMessages = Object.values(err.response?.data?.errors ?? err.response?.data ?? {})\r\n .filter((x) => x.length > 0)\r\n .map((x) => x[0])\r\n if (errorMessages.length < 1) return\r\n ApiAlertContext?.ApiAlert?.PushError(errorMessages.join('\\n'))\r\n}\r\n\r\n/**\r\n * Checks if the current user's token is expired.\r\n * @returns {Promise<boolean>} True if token is expired or user not logged in, false otherwise.\r\n */\r\nexport const checkTokenExpiry = async () => {\r\n try {\r\n const user = await authService.getUser()\r\n if (!user) {\r\n console.log('No user is currently logged in.')\r\n return true\r\n }\r\n\r\n const now = Math.floor(Date.now() / 1000) // Current time in seconds since epoch\r\n const expiresIn = user.exp - now\r\n\r\n if (expiresIn <= 0) {\r\n console.log('The token has expired.')\r\n return true\r\n } else {\r\n console.log(`The token will expire in ${expiresIn} seconds.`)\r\n return false\r\n }\r\n } catch (error) {\r\n console.error('Error checking token expiry:', error)\r\n return true\r\n }\r\n}\r\n/**\r\n * Refreshes the token once if at least 4 seconds have passed since the last refresh.\r\n * Uses localStorage key 'ltt' to track last refresh time.\r\n */\r\nexport const refreshTokenOnce = async () => {\r\n const timeStamp = new Date().getTime() - parseInt(localStorage.getItem('ltt') ?? '0')\r\n localStorage.setItem('ltt', new Date().getTime().toString())\r\n if (timeStamp >= 4000) {\r\n try {\r\n await authService.ensureUserManagerInitialized()\r\n await authService.signIn({})\r\n } catch (e) {\r\n console.log(e)\r\n }\r\n }\r\n}\r\n/**\r\n * Handles errors from Axios HTTP responses.\r\n * Redirects or signs out user based on error code and status.\r\n * @param {AxiosError} err - The error object from Axios.\r\n * @returns {Promise<never>} Always rejects with the error.\r\n */\r\nexport const handleResponseError = async (err: AxiosError) => {\r\n if (err.response?.status === 403) {\r\n const dataError: { Code: number; Message: string } = err.response.data as any\r\n switch (dataError.Code) {\r\n case 3: {\r\n await authService.signOut({ returnUrl: authService.getReturnUrl() })\r\n break\r\n }\r\n case 1: {\r\n await authService.userManager?.revokeTokens(['access_token'])\r\n window.location.replace(ApplicationPaths.Origin(''))\r\n break\r\n }\r\n default: {\r\n window.location.replace(ApplicationPaths.Origin(ApplicationPaths.IdentityAccessDenied))\r\n break\r\n }\r\n }\r\n } else if (err.response?.status === 401) {\r\n } else if (err.code === 'ERR_CANCELED') {\r\n } else if ((err.response?.status ?? 500) >= 500) {\r\n if (err.code !== 'ERR_CANCELED') {\r\n ApiAlertContext?.ApiAlert?.PushError('An error has occurred!')\r\n }\r\n } else if (err.response?.status === 404) {\r\n ApiAlertContext?.ApiAlert?.PushError('Resource not found!')\r\n }\r\n return Promise.reject(err)\r\n}\r\n"],"names":["ApiAlertContext","globalThis","process","env","NODE_ENV","authService","sleep","sec","Promise","res","setTimeout","fetchDelay","_ref","_asyncToGenerator","_regenerator","m","_callee","action","_yield$Promise$all","_yield$Promise$all2","w","_context","n","all","v","_slicedToArray","a","_x","_x2","apply","this","arguments","resolveBaseUrl","baseUri","prefix","APP_API_URL","window","location","origin","URL","_unused","concat","processError","err","_ref2","_err$response$data$er","_err$response","_err$response2","_ApiAlertContext$ApiA","errorMessages","Object","values","response","data","errors","filter","x","length","map","ApiAlert","PushError","join","handleResponseError","_ref5","_callee4","_err$response3","_err$response4","_err$response$status","_err$response5","_err$response6","dataError","_authService$userMana","_ApiAlertContext$ApiA2","_ApiAlertContext$ApiA3","_t3","_context4","status","Code","signOut","returnUrl","getReturnUrl","userManager","revokeTokens","replace","ApplicationPaths","Origin","IdentityAccessDenied","code","reject","_x3"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createClass as t,asyncToGenerator as r,inherits as n,wrapNativeSuper as e,regenerator as a,classCallCheck as u,defineProperty as s,callSuper as i,superPropGet as c}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{authService as o}from"partner-oidc-auth";import h from"axios";import{HttpService as
|
|
1
|
+
import{createClass as t,asyncToGenerator as r,inherits as n,wrapNativeSuper as e,regenerator as a,classCallCheck as u,defineProperty as s,callSuper as i,superPropGet as c}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{authService as o}from"partner-oidc-auth";import h from"axios";import{HttpService as p}from"./gateway.js";import{ApiAlertContext as f,handleResponseError as l}from"./helpers.js";var v=function(){return t(function t(n){var e=this;u(this,t),s(this,"mapResponse",function(){e._http.interceptors.response.use(function(t){return t},function(t){return e.tryFetchToken(t,l)}),e._http.interceptors.request.use(function(t){return e.interuptHeader(t)})}),s(this,"tryFetchToken",function(){var t=r(a().m(function t(r,n){var u,s;return a().w(function(t){for(;;)switch(t.n){case 0:if(s=r.config,401!==(null==r||null===(u=r.response)||void 0===u?void 0:u.status)||!s){t.n=3;break}return t.n=1,o.signIn({});case 1:return t.n=2,e.interuptHeader(s);case 2:return t.a(2,h(s));case 3:return t.a(2,n(r))}},t)}));return function(r,n){return t.apply(this,arguments)}}()),s(this,"getToken",r(a().m(function t(){var r;return a().w(function(t){for(;;)switch(t.n){case 0:if(void 0!==e._token){t.n=2;break}return t.n=1,o.getAccessToken();case 1:r=t.v,t.n=3;break;case 2:r=e._token;case 3:return t.a(2,r)}},t)}))),s(this,"addtoken",function(){var t=r(a().m(function t(r){var n;return a().w(function(t){for(;;)switch(t.n){case 0:return t.n=1,e.getToken();case 1:return(n=t.v)&&null!=r&&r.headers&&(r.headers.Authorization="Bearer "+n),t.a(2,r)}},t)}));return function(r){return t.apply(this,arguments)}}()),this._http=n||p,this.mapResponse()},[{key:"setToken",value:function(t){this._token=t}},{key:"addCustomHeader",value:(_=r(a().m(function t(r){return a().w(function(t){for(;;)if(0===t.n)return r||(r={headers:{}}),r.headers||(r.headers={}),t.a(2,r)},t)})),function(t){return _.apply(this,arguments)})},{key:"interuptHeader",value:(H=r(a().m(function t(r){return a().w(function(t){for(;;)switch(t.n){case 0:return t.n=1,this.addtoken(r);case 1:return t.a(2,r)}},t,this)})),function(t){return H.apply(this,arguments)})},{key:"get",value:(C=r(a().m(function t(r,n){var e,u,s;return a().w(function(t){for(;;)switch(t.n){case 0:return u=this._http,s=r,t.n=1,this.addCustomHeader(n);case 1:return t.n=2,u.get.call(u,s,t.v);case 2:return e=t.v,t.a(2,e.data)}},t,this)})),function(t,r){return C.apply(this,arguments)})},{key:"tryGet",value:(g=r(a().m(function t(r,n){return a().w(function(t){for(;;)switch(t.p=t.n){case 0:return t.p=0,t.a(2,this.get(r,n));case 1:return t.p=1,t.v,t.a(2,null)}},t,this,[[0,1]])})),function(t,r){return g.apply(this,arguments)})},{key:"post",value:(k=r(a().m(function t(r,n,e){var u,s,i,c;return a().w(function(t){for(;;)switch(t.n){case 0:return s=this._http,i=r,c=n,t.n=1,this.addCustomHeader(e);case 1:return t.n=2,s.post.call(s,i,c,t.v);case 2:return u=t.v,t.a(2,u.data)}},t,this)})),function(t,r,n){return k.apply(this,arguments)})},{key:"put",value:(m=r(a().m(function t(r,n,e){var u,s,i,c;return a().w(function(t){for(;;)switch(t.n){case 0:return s=this._http,i=r,c=n,t.n=1,this.addCustomHeader(e);case 1:return t.n=2,s.put.call(s,i,c,t.v);case 2:return u=t.v,t.a(2,u.data)}},t,this)})),function(t,r,n){return m.apply(this,arguments)})},{key:"tryPut",value:(w=r(a().m(function t(r,n,e){return a().w(function(t){for(;;)switch(t.p=t.n){case 0:return t.p=0,t.n=1,this.addCustomHeader(e);case 1:return t.n=2,this.put(r,n,e);case 2:return t.a(2,t.v);case 3:return t.p=3,t.v,t.a(2,null)}},t,this,[[0,3]])})),function(t,r,n){return w.apply(this,arguments)})},{key:"patch",value:(y=r(a().m(function t(r,n,e){var u,s,i,c;return a().w(function(t){for(;;)switch(t.n){case 0:return s=this._http,i=r,c=n,t.n=1,this.addCustomHeader(e);case 1:return t.n=2,s.patch.call(s,i,c,t.v);case 2:return u=t.v,t.a(2,u.data)}},t,this)})),function(t,r,n){return y.apply(this,arguments)})},{key:"tryPatch",value:(d=r(a().m(function t(r,n,e){return a().w(function(t){for(;;)switch(t.p=t.n){case 0:return t.p=0,t.n=1,this.addCustomHeader(e);case 1:return t.n=2,this.patch(r,n,e);case 2:return t.a(2,t.v);case 3:return t.p=3,t.v,t.a(2,null)}},t,this,[[0,3]])})),function(t,r,n){return d.apply(this,arguments)})},{key:"tryPost",value:(v=r(a().m(function t(r,n,e){return a().w(function(t){for(;;)switch(t.p=t.n){case 0:return t.p=0,t.n=1,this.post(r,n,e);case 1:return t.a(2,t.v);case 2:return t.p=2,t.v,t.a(2,null)}},t,this,[[0,2]])})),function(t,r,n){return v.apply(this,arguments)})},{key:"delete",value:(c=r(a().m(function t(r,n){var e,u,s;return a().w(function(t){for(;;)switch(t.n){case 0:return u=this._http,s=r,t.n=1,this.addCustomHeader(n);case 1:return t.n=2,u.delete.call(u,s,t.v);case 2:return e=t.v,t.a(2,e.data)}},t,this)})),function(t,r){return c.apply(this,arguments)})},{key:"tryDelete",value:(i=r(a().m(function t(r,n){var e,u;return a().w(function(t){for(;;)switch(t.p=t.n){case 0:return t.p=0,e=this,u=r,t.n=1,this.addCustomHeader(n);case 1:return t.n=2,e.delete.call(e,u,t.v);case 2:return t.a(2,t.v);case 3:return t.p=3,t.v,t.a(2,null)}},t,this,[[0,3]])})),function(t,r){return i.apply(this,arguments)})},{key:"tryPushNotify",value:(e=r(a().m(function t(r){var n,e,u,s=arguments;return a().w(function(t){for(;;)switch(t.p=t.n){case 0:for(t.p=0,n=s.length,e=new Array(n>1?n-1:0),u=1;u<n;u++)e[u-1]=s[u];return t.n=1,this.pushNotify.apply(this,[r].concat(e));case 1:return t.a(2,t.v);case 2:t.p=2,t.v;case 3:return t.a(2)}},t,this,[[0,2]])})),function(t){return e.apply(this,arguments)})},{key:"pushNotify",value:(n=r(a().m(function t(r){var n,e,u,s,i,c,o,h=arguments;return a().w(function(t){for(;;)switch(t.p=t.n){case 0:for(t.p=0,n=h.length,e=new Array(n>1?n-1:0),u=1;u<n;u++)e[u-1]=h[u];return t.n=1,r.bind(this).apply(void 0,e);case 1:return t.a(2,t.v);case 2:throw t.p=2,o=t.v,(c=null===(s=(i=o).response)||void 0===s?void 0:s.data)&&Object.keys(c).forEach(function(t){var r=c[t];Array.isArray(r)&&r.forEach(function(t){var r;null==f||null===(r=f.ApiAlert)||void 0===r||r.PushError(t)})}),i;case 3:return t.a(2)}},t,this,[[0,2]])})),function(t){return n.apply(this,arguments)})}]);var n,e,i,c,v,d,y,w,m,k,g,C,H,_}(),d=function(r){function e(){var t;u(this,e);for(var r=arguments.length,n=new Array(r),a=0;a<r;a++)n[a]=arguments[a];return t=i(this,e,[].concat(n)),s(t,"cancel",function(){t.trigger&&t.trigger(),c(e,"abort",t)([])}),t}return n(e,r),t(e)}(e(AbortController));export{d as CancelAction,v as default};
|
|
2
2
|
//# sourceMappingURL=service-base.js.map
|