@apia/api 1.0.4 → 2.0.1

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.
Files changed (37) hide show
  1. package/dist/ApiaApiContext.js +15 -0
  2. package/dist/ApiaApiContext.js.map +1 -0
  3. package/dist/ApiaApiHandler.d.ts +62 -0
  4. package/dist/ApiaApiHandler.d.ts.map +1 -0
  5. package/dist/ApiaApiHandler.js +374 -0
  6. package/dist/ApiaApiHandler.js.map +1 -0
  7. package/dist/apiaApi.d.ts +156 -0
  8. package/dist/apiaApi.d.ts.map +1 -0
  9. package/dist/apiaApi.js +458 -0
  10. package/dist/apiaApi.js.map +1 -0
  11. package/dist/buttons/ApiaApiButtonsContainer.js +129 -0
  12. package/dist/buttons/ApiaApiButtonsContainer.js.map +1 -0
  13. package/dist/fields/ApiaApiCheckbox.js +39 -0
  14. package/dist/fields/ApiaApiCheckbox.js.map +1 -0
  15. package/dist/fields/ApiaApiFieldsContainer.js +213 -0
  16. package/dist/fields/ApiaApiFieldsContainer.js.map +1 -0
  17. package/dist/fields/ApiaApiFileInput.js +34 -0
  18. package/dist/fields/ApiaApiFileInput.js.map +1 -0
  19. package/dist/fields/ApiaApiInput.d.ts +20 -0
  20. package/dist/fields/ApiaApiInput.d.ts.map +1 -0
  21. package/dist/fields/ApiaApiInput.js +110 -0
  22. package/dist/fields/ApiaApiInput.js.map +1 -0
  23. package/dist/fields/ApiaApiRadio.js +43 -0
  24. package/dist/fields/ApiaApiRadio.js.map +1 -0
  25. package/dist/fields/ApiaApiSelect.js +64 -0
  26. package/dist/fields/ApiaApiSelect.js.map +1 -0
  27. package/dist/fields/ApiaApiTextArea.js +50 -0
  28. package/dist/fields/ApiaApiTextArea.js.map +1 -0
  29. package/dist/index.d.ts +5 -255
  30. package/dist/index.js +4 -1771
  31. package/dist/index.js.map +1 -1
  32. package/dist/types.d.ts +39 -0
  33. package/dist/types.d.ts.map +1 -0
  34. package/package.json +23 -36
  35. package/LICENSE.md +0 -21
  36. package/README.md +0 -26
  37. package/cleanDist.json +0 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiaApiButtonsContainer.js","sources":["../../src/buttons/ApiaApiButtonsContainer.tsx"],"sourcesContent":["import { arrayOrArray, TApiaFormButton, TApiaLoad } from '@apia/util';\nimport uniqueId from 'lodash-es/uniqueId';\nimport QueryString from 'qs';\nimport React from 'react';\nimport { Box } from '@apia/theme';\nimport {\n hasSucceedFormValidation,\n useFormContext,\n validationsStore,\n} from '@apia/validations';\nimport { ISimpleButton, SimpleButton } from '@apia/components';\nimport { getFunction, TApiaApiMethodHandler } from '../ApiaApiHandler';\nimport ApiaApi from '../apiaApi';\n\ntype TApiaApiButtonsContainer = TApiaApiMethodHandler & {\n definition?: TApiaLoad | undefined;\n};\n\ntype TApiaApiButton = Omit<TApiaFormButton, 'type'> &\n Pick<ISimpleButton, 'type'> & {\n buttonKey: string;\n };\n\nconst parseButtons = (buttons: TApiaFormButton[]): TApiaApiButton[] => {\n return buttons.map((currentButton) => ({\n ...currentButton,\n buttonKey: uniqueId(),\n type: ['submitAjax', 'submit'].includes(currentButton.type)\n ? 'submit'\n : 'button',\n }));\n};\n\nconst NonMemoizedApiaApiButtonsContainer = (\n props: TApiaApiButtonsContainer,\n) => {\n const buttonElements = React.useMemo(\n () => arrayOrArray(props.definition?.form.buttons?.button ?? []),\n [props.definition?.form.buttons?.button],\n );\n const buttons = React.useMemo(\n () => parseButtons(buttonElements),\n [buttonElements],\n );\n const modalConfiguration = React.useMemo(\n () => props.configuration?.modalConfiguration,\n [props.configuration?.modalConfiguration],\n );\n const methodsPath = React.useMemo(\n () => props.configuration?.methodsPath,\n [props.configuration?.methodsPath],\n );\n const { name: apiaApiForm } = useFormContext();\n\n const renderButton = React.useCallback(\n (currentButton: TApiaApiButton) => {\n const key = currentButton.buttonKey;\n const className = `handler__${currentButton.type ?? ''}`;\n const onClick = () => {\n void (async function submitForm() {\n const validationResult =\n await validationsStore.validateForm(apiaApiForm);\n if (!hasSucceedFormValidation(validationResult)) {\n return;\n }\n const { submitValues } = validationResult;\n\n function runButtonMethod() {\n void (async () => {\n if (currentButton.onclick) {\n const actions = currentButton.onclick.split(';');\n // eslint-disable-next-line no-restricted-syntax\n for await (const action of actions) {\n const method = await getFunction(action, {\n ...props,\n });\n\n if (method) {\n method({\n currentUrl: props.definition?.form.action ?? 'noUrl',\n });\n } else {\n throw new Error(\n `The requested action is not defined: \"${\n props.definition?.form.action ?? ''\n }\"`,\n );\n }\n }\n }\n })();\n }\n\n if (props?.definition && currentButton.type === 'submit') {\n const formData = new FormData();\n Object.entries(submitValues).forEach(([name, value]) => {\n formData.append(name, (value as string | Blob) ?? '');\n });\n\n const hasContext = props?.definition.form.action.match(\n new RegExp(`^${window.CONTEXT}/`),\n );\n const url = `${hasContext ? '' : window.CONTEXT}${\n !props?.definition.form.action.startsWith('/') ? '/' : ''\n }${props?.definition.form.action}`;\n\n props.setState((current) => ({\n ...current,\n isLoading: true,\n }));\n\n void ApiaApi.post(url, {\n postData: props.state.isMultipart\n ? formData\n : QueryString.stringify(\n [...formData.entries(), ['isAjax', true]].reduce<\n Record<string, string>\n >((accumulated, [name, value]) => {\n const retValue = { ...accumulated };\n retValue[name.toString()] = value.toString();\n return retValue;\n }, {}),\n ),\n handleLoad: true,\n notificationsCategory: 'apiaApiHandler',\n modalConfiguration,\n methodsPath,\n }).finally(() => {\n runButtonMethod();\n if (props?.definition?.form.closeOnSubmit) {\n props.close();\n }\n });\n } else {\n runButtonMethod();\n }\n })();\n };\n return (\n <SimpleButton\n className={className}\n disabled={props.state.disabled}\n id={currentButton.id || currentButton.text}\n isLoading={props.state.isLoading}\n key={key}\n title={currentButton.text}\n type={currentButton.type}\n onClick={onClick}\n >\n {currentButton.text}\n </SimpleButton>\n );\n },\n [apiaApiForm, methodsPath, modalConfiguration, props],\n );\n\n return (\n <Box className=\"handler__form__buttons\">\n {buttons.map((currentButton) => renderButton(currentButton))}\n </Box>\n );\n};\n\nexport const ApiaApiButtonsContainer = React.memo(\n NonMemoizedApiaApiButtonsContainer,\n);\n"],"names":["React"],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { jsx } from '@apia/theme/jsx-runtime';
2
+ import { classToValidate, Checkbox } from '@apia/validations';
3
+ import React__default from 'react';
4
+
5
+ const ApiaApiCheckbox = (props) => {
6
+ const element = React__default.useMemo(() => props.element, [props.element]);
7
+ const className = React__default.useMemo(
8
+ () => element.class ? `handler__checkbox ${element.class}` : "handler__checkbox",
9
+ [element.class]
10
+ );
11
+ const validationRules = React__default.useMemo(
12
+ () => ({
13
+ required: element.mandatory,
14
+ ...classToValidate(element.class)
15
+ }),
16
+ [element.class, element.mandatory]
17
+ );
18
+ const submitValueParser = React__default.useCallback(
19
+ (value) => value === "on" || value === true,
20
+ []
21
+ );
22
+ return /* @__PURE__ */ jsx(
23
+ Checkbox,
24
+ {
25
+ className,
26
+ name: element.id || element.name,
27
+ label: element.text,
28
+ title: element.title || element.text,
29
+ initialValue: String(element.selected) === "true",
30
+ disabled: element.readonly || element.disabled,
31
+ validationRules,
32
+ onChange: element.onChange,
33
+ submitValueParser
34
+ }
35
+ );
36
+ };
37
+
38
+ export { ApiaApiCheckbox };
39
+ //# sourceMappingURL=ApiaApiCheckbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiaApiCheckbox.js","sources":["../../src/fields/ApiaApiCheckbox.tsx"],"sourcesContent":["import { classToValidate, Checkbox } from '@apia/validations';\nimport React from 'react';\nimport { TApiaApiField } from '../ApiaApiHandler';\n\nexport const ApiaApiCheckbox = (props: TApiaApiField) => {\n const element = React.useMemo(() => props.element, [props.element]);\n const className = React.useMemo(\n () =>\n element.class\n ? `handler__checkbox ${element.class}`\n : 'handler__checkbox',\n [element.class],\n );\n const validationRules = React.useMemo(\n () => ({\n required: element.mandatory,\n ...classToValidate(element.class),\n }),\n [element.class, element.mandatory],\n );\n const submitValueParser = React.useCallback(\n (value: boolean | string) => value === 'on' || value === true,\n [],\n );\n return (\n <Checkbox\n className={className}\n name={element.id || element.name}\n label={element.text}\n title={element.title || element.text}\n initialValue={String(element.selected) === 'true'}\n disabled={element.readonly || element.disabled}\n validationRules={validationRules}\n onChange={element.onChange}\n submitValueParser={submitValueParser}\n />\n );\n};\n"],"names":["React"],"mappings":";;;;AAIa,MAAA,eAAA,GAAkB,CAAC,KAAyB,KAAA;AACvD,EAAM,MAAA,OAAA,GAAUA,eAAM,OAAQ,CAAA,MAAM,MAAM,OAAS,EAAA,CAAC,KAAM,CAAA,OAAO,CAAC,CAAA,CAAA;AAClE,EAAA,MAAM,YAAYA,cAAM,CAAA,OAAA;AAAA,IACtB,MACE,OAAQ,CAAA,KAAA,GACJ,CAAqB,kBAAA,EAAA,OAAA,CAAQ,KAAK,CAClC,CAAA,GAAA,mBAAA;AAAA,IACN,CAAC,QAAQ,KAAK,CAAA;AAAA,GAChB,CAAA;AACA,EAAA,MAAM,kBAAkBA,cAAM,CAAA,OAAA;AAAA,IAC5B,OAAO;AAAA,MACL,UAAU,OAAQ,CAAA,SAAA;AAAA,MAClB,GAAG,eAAgB,CAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,KAClC,CAAA;AAAA,IACA,CAAC,OAAA,CAAQ,KAAO,EAAA,OAAA,CAAQ,SAAS,CAAA;AAAA,GACnC,CAAA;AACA,EAAA,MAAM,oBAAoBA,cAAM,CAAA,WAAA;AAAA,IAC9B,CAAC,KAAA,KAA4B,KAAU,KAAA,IAAA,IAAQ,KAAU,KAAA,IAAA;AAAA,IACzD,EAAC;AAAA,GACH,CAAA;AACA,EACE,uBAAA,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,IAAA,EAAM,OAAQ,CAAA,EAAA,IAAM,OAAQ,CAAA,IAAA;AAAA,MAC5B,OAAO,OAAQ,CAAA,IAAA;AAAA,MACf,KAAA,EAAO,OAAQ,CAAA,KAAA,IAAS,OAAQ,CAAA,IAAA;AAAA,MAChC,YAAc,EAAA,MAAA,CAAO,OAAQ,CAAA,QAAQ,CAAM,KAAA,MAAA;AAAA,MAC3C,QAAA,EAAU,OAAQ,CAAA,QAAA,IAAY,OAAQ,CAAA,QAAA;AAAA,MACtC,eAAA;AAAA,MACA,UAAU,OAAQ,CAAA,QAAA;AAAA,MAClB,iBAAA;AAAA,KAAA;AAAA,GACF,CAAA;AAEJ;;;;"}
@@ -0,0 +1,213 @@
1
+ import { jsx, jsxs } from '@apia/theme/jsx-runtime';
2
+ import { Box, getVariant } from '@apia/theme';
3
+ import { arrayOrArray } from '@apia/util';
4
+ import uniqueId from 'lodash-es/uniqueId';
5
+ import React__default from 'react';
6
+ import { getFunction } from '../ApiaApiHandler.js';
7
+ import { ApiaApiCheckbox } from './ApiaApiCheckbox.js';
8
+ import { ApiaApiFileInput } from './ApiaApiFileInput.js';
9
+ import { ApiaApiInput } from './ApiaApiInput.js';
10
+ import { ApiaApiRadio } from './ApiaApiRadio.js';
11
+ import { ApiaApiSelect } from './ApiaApiSelect.js';
12
+ import { ApiaApiTextArea } from './ApiaApiTextArea.js';
13
+
14
+ const parseApiaApiSections = (elements) => {
15
+ const removeEndingSpacers = (sectionElements) => {
16
+ if (sectionElements.length > 1) {
17
+ for (let i = sectionElements.length - 1; i >= 0; i--) {
18
+ if (sectionElements[i].type === "empty") {
19
+ sectionElements.pop();
20
+ } else {
21
+ return sectionElements;
22
+ }
23
+ }
24
+ }
25
+ return sectionElements;
26
+ };
27
+ const sectionIndexes = [];
28
+ if (elements[0]?.type !== "2columnTitle") {
29
+ sectionIndexes.push(-1);
30
+ }
31
+ elements.forEach((element, index) => {
32
+ if (element.type === "2columnTitle") {
33
+ sectionIndexes.push(index);
34
+ }
35
+ });
36
+ const sections = [];
37
+ sectionIndexes.forEach((sectionIndex, arrayIndex) => {
38
+ const start = sectionIndex + 1 < elements.length ? sectionIndex + 1 : elements.length - 1;
39
+ const end = arrayIndex + 1 < sectionIndexes.length ? sectionIndexes[arrayIndex + 1] : void 0;
40
+ sections.push({
41
+ sectionId: `ApiaApiSection_${arrayIndex}`,
42
+ sectionHeader: sectionIndex !== -1 ? {
43
+ ...elements[sectionIndex],
44
+ sectionElementId: `sectionHeader_${arrayIndex}`
45
+ } : void 0,
46
+ sectionElements: removeEndingSpacers(elements.slice(start, end)).map(
47
+ (currentElement) => ({
48
+ ...currentElement,
49
+ sectionElementId: `sectionElement_${currentElement.id || currentElement.name || uniqueId()}`
50
+ })
51
+ )
52
+ });
53
+ });
54
+ return sections;
55
+ };
56
+ const NonMemoizedApiaApiFieldsContainer = (props) => {
57
+ const elements = React__default.useMemo(
58
+ () => arrayOrArray(props?.definition?.form.elements?.element ?? []),
59
+ [props?.definition?.form.elements?.element]
60
+ );
61
+ const sections = React__default.useMemo(
62
+ () => parseApiaApiSections(elements),
63
+ [elements]
64
+ );
65
+ const renderSectionContent = React__default.useCallback(
66
+ (sectionId, sectionElements) => {
67
+ const isVisible = sectionElements.findIndex((element) => element.type !== "hidden") !== -1;
68
+ return /* @__PURE__ */ jsx(
69
+ Box,
70
+ {
71
+ className: isVisible ? "handler__form__elements__section__content" : `handler__form__elements__section__content handler__hidden`,
72
+ children: sectionElements.map((current) => {
73
+ const element = {
74
+ ...current,
75
+ onChange() {
76
+ getFunction(current.onChange, props).then((onChangeMethod) => {
77
+ if (onChangeMethod) {
78
+ onChangeMethod();
79
+ }
80
+ }).catch(console.error);
81
+ }
82
+ };
83
+ switch (element.type) {
84
+ case "table": {
85
+ const data = JSON.parse(element.text);
86
+ return /* @__PURE__ */ jsx(
87
+ Box,
88
+ {
89
+ ...getVariant("layout.common.tables.information"),
90
+ children: /* @__PURE__ */ jsxs("table", { sx: { width: "100%" }, children: [
91
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsx("tr", { children: data.columns.map((column) => {
92
+ return /* @__PURE__ */ jsx("th", { children: column }, column);
93
+ }) }) }),
94
+ /* @__PURE__ */ jsx("tbody", { children: data.rows.map((row) => {
95
+ return /* @__PURE__ */ jsx("tr", { children: row.cells.map((cell, i) => {
96
+ return /* @__PURE__ */ jsx("td", { children: cell }, `${cell}_${data.columns[i]}`);
97
+ }) }, row.cells.join("-"));
98
+ }) })
99
+ ] })
100
+ },
101
+ element.sectionElementId
102
+ );
103
+ }
104
+ case "2columnSubTitle":
105
+ return /* @__PURE__ */ jsx(
106
+ Box,
107
+ {
108
+ className: element.class,
109
+ as: "h6",
110
+ children: element.value || element.text
111
+ },
112
+ element.sectionElementId
113
+ );
114
+ case "2column":
115
+ return /* @__PURE__ */ jsx(
116
+ Box,
117
+ {
118
+ dangerouslySetInnerHTML: {
119
+ __html: element.value || element.text
120
+ },
121
+ className: element.class
122
+ },
123
+ element.sectionElementId
124
+ );
125
+ case "checkbox":
126
+ return /* @__PURE__ */ jsx(
127
+ ApiaApiCheckbox,
128
+ {
129
+ ...props,
130
+ element
131
+ },
132
+ element.sectionElementId
133
+ );
134
+ case "file":
135
+ return /* @__PURE__ */ jsx(
136
+ ApiaApiFileInput,
137
+ {
138
+ ...props,
139
+ element
140
+ },
141
+ element.sectionElementId
142
+ );
143
+ case "hidden":
144
+ case "password":
145
+ case "text":
146
+ return /* @__PURE__ */ jsx(
147
+ ApiaApiInput,
148
+ {
149
+ ...props,
150
+ element
151
+ },
152
+ element.sectionElementId
153
+ );
154
+ case "select":
155
+ return /* @__PURE__ */ jsx(
156
+ ApiaApiSelect,
157
+ {
158
+ ...props,
159
+ element
160
+ },
161
+ element.sectionElementId
162
+ );
163
+ case "radio":
164
+ return /* @__PURE__ */ jsx(
165
+ ApiaApiRadio,
166
+ {
167
+ ...props,
168
+ element
169
+ },
170
+ element.sectionElementId
171
+ );
172
+ case "textarea":
173
+ return /* @__PURE__ */ jsx(
174
+ ApiaApiTextArea,
175
+ {
176
+ ...props,
177
+ element
178
+ },
179
+ element.sectionElementId
180
+ );
181
+ case "empty":
182
+ return /* @__PURE__ */ jsx(Box, { className: "spacer" }, element.sectionElementId);
183
+ default:
184
+ console.warn(
185
+ `Unhandled element type: ${element.type}`,
186
+ element
187
+ );
188
+ return null;
189
+ }
190
+ })
191
+ },
192
+ sectionId
193
+ );
194
+ },
195
+ [props]
196
+ );
197
+ return /* @__PURE__ */ jsx(Box, { className: "handler__form__elements", children: sections.map((section) => {
198
+ if (section.sectionHeader) {
199
+ return renderSectionContent(
200
+ section.sectionId,
201
+ section.sectionElements
202
+ );
203
+ }
204
+ return renderSectionContent(section.sectionId, section.sectionElements);
205
+ }) });
206
+ };
207
+ const ApiaApiFieldsContainer = React__default.memo(
208
+ NonMemoizedApiaApiFieldsContainer
209
+ );
210
+ ApiaApiFieldsContainer.displayName = "ApiaApiFieldsContainer";
211
+
212
+ export { ApiaApiFieldsContainer };
213
+ //# sourceMappingURL=ApiaApiFieldsContainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiaApiFieldsContainer.js","sources":["../../src/fields/ApiaApiFieldsContainer.tsx"],"sourcesContent":["import { getVariant } from '@apia/theme';\nimport { arrayOrArray, TApiaFormElement, TApiaLoad } from '@apia/util';\nimport uniqueId from 'lodash-es/uniqueId';\nimport React from 'react';\nimport { Box } from '@apia/theme';\nimport { getFunction, TApiaApiMethodHandler } from '../ApiaApiHandler';\nimport { TModalTable } from '../types';\nimport { ApiaApiCheckbox } from './ApiaApiCheckbox';\nimport { ApiaApiFileInput } from './ApiaApiFileInput';\nimport { ApiaApiInput } from './ApiaApiInput';\nimport { ApiaApiRadio } from './ApiaApiRadio';\nimport { ApiaApiSelect } from './ApiaApiSelect';\nimport { ApiaApiTextArea } from './ApiaApiTextArea';\n\ntype TApiaApiFieldsContainer = TApiaApiMethodHandler & {\n definition?: TApiaLoad | undefined;\n};\n\ntype TApiaApiSectionElement = TApiaFormElement & {\n sectionElementId: string;\n};\n\ntype TApiaApiSection = {\n sectionId: string;\n sectionHeader?: TApiaApiSectionElement;\n sectionElements: TApiaApiSectionElement[];\n};\n\nconst parseApiaApiSections = (elements: TApiaFormElement[]) => {\n const removeEndingSpacers = (\n sectionElements: TApiaFormElement[],\n ): TApiaFormElement[] => {\n if (sectionElements.length > 1) {\n for (let i = sectionElements.length - 1; i >= 0; i--) {\n if (sectionElements[i].type === 'empty') {\n sectionElements.pop();\n } else {\n return sectionElements;\n }\n }\n }\n return sectionElements;\n };\n const sectionIndexes: number[] = [];\n if (elements[0]?.type !== '2columnTitle') {\n sectionIndexes.push(-1);\n }\n elements.forEach((element, index) => {\n if (element.type === '2columnTitle') {\n sectionIndexes.push(index);\n }\n });\n const sections: TApiaApiSection[] = [];\n sectionIndexes.forEach((sectionIndex, arrayIndex) => {\n const start =\n sectionIndex + 1 < elements.length\n ? sectionIndex + 1\n : elements.length - 1;\n const end =\n arrayIndex + 1 < sectionIndexes.length\n ? sectionIndexes[arrayIndex + 1]\n : undefined;\n sections.push({\n sectionId: `ApiaApiSection_${arrayIndex}`,\n sectionHeader:\n sectionIndex !== -1\n ? {\n ...elements[sectionIndex],\n sectionElementId: `sectionHeader_${arrayIndex}`,\n }\n : undefined,\n sectionElements: removeEndingSpacers(elements.slice(start, end)).map(\n (currentElement) => ({\n ...currentElement,\n sectionElementId: `sectionElement_${\n currentElement.id || currentElement.name || uniqueId()\n }`,\n }),\n ),\n });\n });\n return sections;\n};\n\nconst NonMemoizedApiaApiFieldsContainer = (props: TApiaApiFieldsContainer) => {\n const elements = React.useMemo(\n () => arrayOrArray(props?.definition?.form.elements?.element ?? []),\n [props?.definition?.form.elements?.element],\n );\n\n const sections = React.useMemo(\n () => parseApiaApiSections(elements),\n [elements],\n );\n\n const renderSectionContent = React.useCallback(\n (sectionId: string, sectionElements: TApiaApiSectionElement[]) => {\n const isVisible =\n sectionElements.findIndex((element) => element.type !== 'hidden') !==\n -1;\n return (\n <Box\n className={\n isVisible\n ? 'handler__form__elements__section__content'\n : `handler__form__elements__section__content handler__hidden`\n }\n key={sectionId}\n >\n {sectionElements.map((current) => {\n const element = {\n ...current,\n onChange() {\n getFunction(current.onChange, props)\n .then((onChangeMethod) => {\n if (onChangeMethod) {\n onChangeMethod();\n }\n })\n .catch(console.error);\n },\n };\n switch (element.type) {\n case 'table': {\n const data = JSON.parse(element.text) as TModalTable;\n return (\n <Box\n key={element.sectionElementId}\n {...getVariant('layout.common.tables.information')}\n >\n <table sx={{ width: '100%' }}>\n <thead>\n <tr>\n {data.columns.map((column) => {\n return <th key={column}>{column}</th>;\n })}\n </tr>\n </thead>\n <tbody>\n {data.rows.map((row) => {\n return (\n <tr key={row.cells.join('-')}>\n {row.cells.map((cell, i) => {\n return (\n <td key={`${cell}_${data.columns[i]}`}>\n {cell}\n </td>\n );\n })}\n </tr>\n );\n })}\n </tbody>\n </table>\n </Box>\n );\n }\n case '2columnSubTitle':\n return (\n <Box\n key={element.sectionElementId}\n className={element.class}\n as=\"h6\"\n >\n {element.value || element.text}\n </Box>\n );\n case '2column':\n return (\n <Box\n key={element.sectionElementId}\n dangerouslySetInnerHTML={{\n __html: element.value || element.text,\n }}\n className={element.class}\n />\n );\n case 'checkbox':\n return (\n <ApiaApiCheckbox\n key={element.sectionElementId}\n {...props}\n element={element}\n />\n );\n case 'file':\n return (\n <ApiaApiFileInput\n key={element.sectionElementId}\n {...props}\n element={element}\n />\n );\n case 'hidden':\n case 'password':\n case 'text':\n return (\n <ApiaApiInput\n key={element.sectionElementId}\n {...props}\n element={element}\n />\n );\n case 'select':\n return (\n <ApiaApiSelect\n key={element.sectionElementId}\n {...props}\n element={element}\n />\n );\n case 'radio':\n return (\n <ApiaApiRadio\n key={element.sectionElementId}\n {...props}\n element={element}\n />\n );\n case 'textarea':\n return (\n <ApiaApiTextArea\n key={element.sectionElementId}\n {...props}\n element={element}\n />\n );\n case 'empty':\n return (\n <Box key={element.sectionElementId} className=\"spacer\" />\n );\n default:\n console.warn(\n `Unhandled element type: ${element.type}`,\n element,\n );\n return null;\n }\n })}\n </Box>\n );\n },\n [props],\n );\n return (\n <Box className=\"handler__form__elements\">\n {sections.map((section) => {\n if (section.sectionHeader) {\n return renderSectionContent(\n section.sectionId,\n section.sectionElements,\n );\n }\n return renderSectionContent(section.sectionId, section.sectionElements);\n })}\n </Box>\n );\n};\n\nexport const ApiaApiFieldsContainer = React.memo(\n NonMemoizedApiaApiFieldsContainer,\n);\n\nApiaApiFieldsContainer.displayName = 'ApiaApiFieldsContainer';\n"],"names":["React"],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { jsx } from '@apia/theme/jsx-runtime';
2
+ import { classToValidate, FileInput } from '@apia/validations';
3
+ import React__default from 'react';
4
+
5
+ const ApiaApiFileInput = (props) => {
6
+ const element = React__default.useMemo(() => props.element, [props.element]);
7
+ const className = React__default.useMemo(
8
+ () => element.class ? `handler__file ${element.class}` : "handler__file",
9
+ [element.class]
10
+ );
11
+ const validationRules = React__default.useMemo(
12
+ () => ({
13
+ required: element.mandatory,
14
+ ...classToValidate(element.class)
15
+ }),
16
+ [element.class, element.mandatory]
17
+ );
18
+ return /* @__PURE__ */ jsx(
19
+ FileInput,
20
+ {
21
+ className,
22
+ name: element.id || element.name,
23
+ label: element.text,
24
+ title: element.title || element.text,
25
+ readOnly: element.readonly,
26
+ disabled: element.disabled,
27
+ validationRules
28
+ }
29
+ );
30
+ };
31
+ ApiaApiFileInput.displayName = "ApiaApiFileInput";
32
+
33
+ export { ApiaApiFileInput };
34
+ //# sourceMappingURL=ApiaApiFileInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiaApiFileInput.js","sources":["../../src/fields/ApiaApiFileInput.tsx"],"sourcesContent":["import { classToValidate, FileInput } from '@apia/validations';\nimport React from 'react';\nimport { TApiaApiField } from '../ApiaApiHandler';\n\nexport const ApiaApiFileInput = (props: TApiaApiField) => {\n const element = React.useMemo(() => props.element, [props.element]);\n const className = React.useMemo(\n () => (element.class ? `handler__file ${element.class}` : 'handler__file'),\n [element.class],\n );\n const validationRules = React.useMemo(\n () => ({\n required: element.mandatory,\n ...classToValidate(element.class),\n }),\n [element.class, element.mandatory],\n );\n\n return (\n <FileInput\n className={className}\n name={element.id || element.name}\n label={element.text}\n title={element.title || element.text}\n readOnly={element.readonly}\n disabled={element.disabled}\n validationRules={validationRules}\n />\n );\n};\n\nApiaApiFileInput.displayName = 'ApiaApiFileInput';\n"],"names":["React"],"mappings":";;;;AAIa,MAAA,gBAAA,GAAmB,CAAC,KAAyB,KAAA;AACxD,EAAM,MAAA,OAAA,GAAUA,eAAM,OAAQ,CAAA,MAAM,MAAM,OAAS,EAAA,CAAC,KAAM,CAAA,OAAO,CAAC,CAAA,CAAA;AAClE,EAAA,MAAM,YAAYA,cAAM,CAAA,OAAA;AAAA,IACtB,MAAO,OAAQ,CAAA,KAAA,GAAQ,CAAiB,cAAA,EAAA,OAAA,CAAQ,KAAK,CAAK,CAAA,GAAA,eAAA;AAAA,IAC1D,CAAC,QAAQ,KAAK,CAAA;AAAA,GAChB,CAAA;AACA,EAAA,MAAM,kBAAkBA,cAAM,CAAA,OAAA;AAAA,IAC5B,OAAO;AAAA,MACL,UAAU,OAAQ,CAAA,SAAA;AAAA,MAClB,GAAG,eAAgB,CAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,KAClC,CAAA;AAAA,IACA,CAAC,OAAA,CAAQ,KAAO,EAAA,OAAA,CAAQ,SAAS,CAAA;AAAA,GACnC,CAAA;AAEA,EACE,uBAAA,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,IAAA,EAAM,OAAQ,CAAA,EAAA,IAAM,OAAQ,CAAA,IAAA;AAAA,MAC5B,OAAO,OAAQ,CAAA,IAAA;AAAA,MACf,KAAA,EAAO,OAAQ,CAAA,KAAA,IAAS,OAAQ,CAAA,IAAA;AAAA,MAChC,UAAU,OAAQ,CAAA,QAAA;AAAA,MAClB,UAAU,OAAQ,CAAA,QAAA;AAAA,MAClB,eAAA;AAAA,KAAA;AAAA,GACF,CAAA;AAEJ,EAAA;AAEA,gBAAA,CAAiB,WAAc,GAAA,kBAAA;;;;"}
@@ -0,0 +1,20 @@
1
+ import React__default from 'react';
2
+ import { TApiaApiField } from '../ApiaApiHandler.js';
3
+
4
+ declare global {
5
+ interface Window {
6
+ SALT: string;
7
+ IV: string;
8
+ PASSPHRASE: string;
9
+ KEY_SIZE: number;
10
+ ITERATION_COUNT: string;
11
+ }
12
+ }
13
+ /**
14
+ * Permite cargar en forma asíncrona un modal que se encuentre dentro del
15
+ * directorio /api/modals
16
+ * */
17
+ declare const getModal: (path: string) => React__default.LazyExoticComponent<React__default.ComponentType<TApiaApiField>>;
18
+
19
+ export { getModal };
20
+ //# sourceMappingURL=ApiaApiInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiaApiInput.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,110 @@
1
+ import { jsx } from '@apia/theme/jsx-runtime';
2
+ import { useMount, encrypt } from '@apia/util';
3
+ import { classToValidate, classToValidationFunction, Input } from '@apia/validations';
4
+ import React__default from 'react';
5
+
6
+ const getModal = (path) => {
7
+ return React__default.lazy(() => {
8
+ return new Promise((resolve) => {
9
+ import(
10
+ /* webpackChunkName: "handlerModal" */
11
+ /* webpackInclude: /\.tsx?$/ */
12
+ `/api/modals/${path}`
13
+ ).then((result) => {
14
+ resolve(
15
+ result
16
+ );
17
+ }).catch((error) => {
18
+ resolve({
19
+ default: () => {
20
+ console.error(error);
21
+ throw new Error(
22
+ `The above error ocurred at component ApiaApiHandler/${path}, does it exist?`
23
+ );
24
+ }
25
+ });
26
+ });
27
+ });
28
+ });
29
+ };
30
+ const ApiaApiInput = (props) => {
31
+ const element = React__default.useMemo(() => props.element, [props.element]);
32
+ const [Submodal, setSubmodal] = React__default.useState(null);
33
+ useMount(() => {
34
+ if (element.modalFunction) {
35
+ const found = element.modalFunction.match(/(?:fnc)?(\w+)\(?\)?$/);
36
+ if (found) {
37
+ const modalName = found[found.length - 1];
38
+ setSubmodal(getModal(modalName));
39
+ }
40
+ }
41
+ });
42
+ const className = React__default.useMemo(
43
+ () => element.class ? `handler__${element.type} ${element.class}` : `handler__${element.type}`,
44
+ [element.class, element.type]
45
+ );
46
+ const validationRules = React__default.useMemo(
47
+ () => ({
48
+ required: element.mandatory,
49
+ maxLength: element.maxlength ? Number(element.maxlength) : void 0,
50
+ pattern: element.regExp,
51
+ patternMessage: element.regExpMessage,
52
+ ...classToValidate(element.class)
53
+ }),
54
+ [
55
+ element.class,
56
+ element.mandatory,
57
+ element.maxlength,
58
+ element.regExp,
59
+ element.regExpMessage
60
+ ]
61
+ );
62
+ const validationFunction = React__default.useMemo(
63
+ () => classToValidationFunction(element.class),
64
+ [element.class]
65
+ );
66
+ const submitValueParser = React__default.useCallback(
67
+ (value) => {
68
+ if (element.type === "password") {
69
+ return encrypt(
70
+ window.SALT,
71
+ window.IV,
72
+ window.PASSPHRASE,
73
+ value,
74
+ Number(window.KEY_SIZE),
75
+ Number(window.ITERATION_COUNT)
76
+ );
77
+ }
78
+ return value;
79
+ },
80
+ [element.type]
81
+ );
82
+ if (element.modalFunction) {
83
+ if (Submodal) {
84
+ return /* @__PURE__ */ jsx(React__default.Suspense, { children: /* @__PURE__ */ jsx(Submodal, { ...props, element }) });
85
+ }
86
+ return null;
87
+ }
88
+ return /* @__PURE__ */ jsx(
89
+ Input,
90
+ {
91
+ type: element.isADate ? "date" : element.type,
92
+ className,
93
+ name: element.id || element.name,
94
+ label: element.text,
95
+ title: element.title || element.text,
96
+ value: element.value,
97
+ readOnly: element.readonly,
98
+ disabled: element.disabled,
99
+ validationFunction,
100
+ validationRules,
101
+ submitValueParser,
102
+ onChange: element.onChange,
103
+ autoComplete: element.type === "password" ? "new-password" : void 0
104
+ }
105
+ );
106
+ };
107
+ ApiaApiInput.displayName = "ApiaApiInput";
108
+
109
+ export { ApiaApiInput, getModal };
110
+ //# sourceMappingURL=ApiaApiInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiaApiInput.js","sources":["../../src/fields/ApiaApiInput.tsx"],"sourcesContent":["import { encrypt, useMount } from '@apia/util';\nimport {\n classToValidate,\n classToValidationFunction,\n Input,\n} from '@apia/validations';\nimport React from 'react';\nimport { TApiaApiField } from '../ApiaApiHandler';\n\ndeclare global {\n interface Window {\n SALT: string;\n IV: string;\n PASSPHRASE: string;\n KEY_SIZE: number;\n ITERATION_COUNT: string;\n }\n}\n\n/**\n * Permite cargar en forma asíncrona un modal que se encuentre dentro del\n * directorio /api/modals\n * */\nexport const getModal = (path: string) => {\n return React.lazy<React.ComponentType<TApiaApiField>>(() => {\n return new Promise<{\n default: React.ComponentType<TApiaApiField>;\n }>((resolve) => {\n import(\n /* webpackChunkName: \"handlerModal\" */\n /* webpackInclude: /\\.tsx?$/ */\n `/api/modals/${path}`\n )\n .then((result: unknown) => {\n resolve(\n result as {\n default: React.ComponentType<TApiaApiField>;\n },\n );\n })\n .catch((error: unknown) => {\n resolve({\n default: () => {\n console.error(error);\n throw new Error(\n `The above error ocurred at component ApiaApiHandler/${path}, does it exist?`,\n );\n },\n });\n });\n });\n });\n};\n\nexport const ApiaApiInput = (props: TApiaApiField) => {\n const element = React.useMemo(() => props.element, [props.element]);\n\n const [Submodal, setSubmodal] = React.useState<React.LazyExoticComponent<\n React.ComponentType<TApiaApiField>\n > | null>(null);\n\n useMount(() => {\n if (element.modalFunction) {\n const found = element.modalFunction.match(/(?:fnc)?(\\w+)\\(?\\)?$/);\n if (found) {\n const modalName = found[found.length - 1];\n setSubmodal(getModal(modalName));\n }\n }\n });\n\n const className = React.useMemo(\n () =>\n element.class\n ? `handler__${element.type} ${element.class}`\n : `handler__${element.type}`,\n [element.class, element.type],\n );\n const validationRules = React.useMemo(\n () => ({\n required: element.mandatory,\n maxLength: element.maxlength ? Number(element.maxlength) : undefined,\n pattern: element.regExp,\n patternMessage: element.regExpMessage,\n ...classToValidate(element.class),\n }),\n [\n element.class,\n element.mandatory,\n element.maxlength,\n element.regExp,\n element.regExpMessage,\n ],\n );\n const validationFunction = React.useMemo(\n () => classToValidationFunction(element.class),\n [element.class],\n );\n const submitValueParser = React.useCallback(\n (value: string) => {\n if (element.type === 'password') {\n return encrypt(\n window.SALT,\n window.IV,\n window.PASSPHRASE,\n value,\n Number(window.KEY_SIZE),\n Number(window.ITERATION_COUNT),\n );\n }\n return value;\n },\n [element.type],\n );\n\n if (element.modalFunction) {\n if (Submodal) {\n return (\n <React.Suspense>\n <Submodal {...props} element={element} />\n </React.Suspense>\n );\n }\n return null;\n }\n\n return (\n <Input\n type={element.isADate ? 'date' : element.type}\n className={className}\n name={element.id || element.name}\n label={element.text}\n title={element.title || element.text}\n value={element.value}\n readOnly={element.readonly}\n disabled={element.disabled}\n validationFunction={validationFunction}\n validationRules={validationRules}\n submitValueParser={submitValueParser}\n onChange={element.onChange}\n autoComplete={element.type === 'password' ? 'new-password' : undefined}\n />\n );\n};\n\nApiaApiInput.displayName = 'ApiaApiInput';\n"],"names":["React"],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { jsx } from '@apia/theme/jsx-runtime';
2
+ import { arrayOrArray } from '@apia/util';
3
+ import { classToValidate, Radio } from '@apia/validations';
4
+ import React__default from 'react';
5
+
6
+ const ApiaApiRadio = (props) => {
7
+ const element = React__default.useMemo(() => props.element, [props.element]);
8
+ const className = React__default.useMemo(
9
+ () => element.class ? `handler__radio ${element.class}` : "handler__radio",
10
+ [element.class]
11
+ );
12
+ const options = React__default.useMemo(
13
+ () => arrayOrArray(element.options?.option).map((currOption) => {
14
+ return { value: currOption.value, label: currOption.content };
15
+ }),
16
+ [element.options?.option]
17
+ );
18
+ const validationRules = React__default.useMemo(
19
+ () => ({
20
+ required: element.mandatory,
21
+ ...classToValidate(element.class)
22
+ }),
23
+ [element.class, element.mandatory]
24
+ );
25
+ return /* @__PURE__ */ jsx(
26
+ Radio,
27
+ {
28
+ className,
29
+ name: element.id || element.name,
30
+ label: element.text,
31
+ title: element.title || element.text,
32
+ initialValue: element.value,
33
+ disabled: element.readonly || element.disabled,
34
+ validationRules,
35
+ options,
36
+ onChange: element.onChange
37
+ }
38
+ );
39
+ };
40
+ ApiaApiRadio.displayName = "ApiaApiRadio";
41
+
42
+ export { ApiaApiRadio };
43
+ //# sourceMappingURL=ApiaApiRadio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiaApiRadio.js","sources":["../../src/fields/ApiaApiRadio.tsx"],"sourcesContent":["import { arrayOrArray } from '@apia/util';\nimport { classToValidate, Radio } from '@apia/validations';\nimport React from 'react';\nimport { TApiaApiField } from '../ApiaApiHandler';\n\nexport const ApiaApiRadio = (props: TApiaApiField) => {\n const element = React.useMemo(() => props.element, [props.element]);\n const className = React.useMemo(\n () =>\n element.class ? `handler__radio ${element.class}` : 'handler__radio',\n [element.class],\n );\n const options = React.useMemo(\n () =>\n arrayOrArray(element.options?.option).map((currOption) => {\n return { value: currOption.value, label: currOption.content };\n }),\n [element.options?.option],\n );\n const validationRules = React.useMemo(\n () => ({\n required: element.mandatory,\n ...classToValidate(element.class),\n }),\n [element.class, element.mandatory],\n );\n return (\n <Radio\n className={className}\n name={element.id || element.name}\n label={element.text}\n title={element.title || element.text}\n initialValue={element.value}\n disabled={element.readonly || element.disabled}\n validationRules={validationRules}\n options={options}\n onChange={element.onChange}\n />\n );\n};\n\nApiaApiRadio.displayName = 'ApiaApiRadio';\n"],"names":["React"],"mappings":";;;;;AAKa,MAAA,YAAA,GAAe,CAAC,KAAyB,KAAA;AACpD,EAAM,MAAA,OAAA,GAAUA,eAAM,OAAQ,CAAA,MAAM,MAAM,OAAS,EAAA,CAAC,KAAM,CAAA,OAAO,CAAC,CAAA,CAAA;AAClE,EAAA,MAAM,YAAYA,cAAM,CAAA,OAAA;AAAA,IACtB,MACE,OAAQ,CAAA,KAAA,GAAQ,CAAkB,eAAA,EAAA,OAAA,CAAQ,KAAK,CAAK,CAAA,GAAA,gBAAA;AAAA,IACtD,CAAC,QAAQ,KAAK,CAAA;AAAA,GAChB,CAAA;AACA,EAAA,MAAM,UAAUA,cAAM,CAAA,OAAA;AAAA,IACpB,MACE,aAAa,OAAQ,CAAA,OAAA,EAAS,MAAM,CAAE,CAAA,GAAA,CAAI,CAAC,UAAe,KAAA;AACxD,MAAA,OAAO,EAAE,KAAO,EAAA,UAAA,CAAW,KAAO,EAAA,KAAA,EAAO,WAAW,OAAQ,EAAA,CAAA;AAAA,KAC7D,CAAA;AAAA,IACH,CAAC,OAAQ,CAAA,OAAA,EAAS,MAAM,CAAA;AAAA,GAC1B,CAAA;AACA,EAAA,MAAM,kBAAkBA,cAAM,CAAA,OAAA;AAAA,IAC5B,OAAO;AAAA,MACL,UAAU,OAAQ,CAAA,SAAA;AAAA,MAClB,GAAG,eAAgB,CAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,KAClC,CAAA;AAAA,IACA,CAAC,OAAA,CAAQ,KAAO,EAAA,OAAA,CAAQ,SAAS,CAAA;AAAA,GACnC,CAAA;AACA,EACE,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,IAAA,EAAM,OAAQ,CAAA,EAAA,IAAM,OAAQ,CAAA,IAAA;AAAA,MAC5B,OAAO,OAAQ,CAAA,IAAA;AAAA,MACf,KAAA,EAAO,OAAQ,CAAA,KAAA,IAAS,OAAQ,CAAA,IAAA;AAAA,MAChC,cAAc,OAAQ,CAAA,KAAA;AAAA,MACtB,QAAA,EAAU,OAAQ,CAAA,QAAA,IAAY,OAAQ,CAAA,QAAA;AAAA,MACtC,eAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAU,OAAQ,CAAA,QAAA;AAAA,KAAA;AAAA,GACpB,CAAA;AAEJ,EAAA;AAEA,YAAA,CAAa,WAAc,GAAA,cAAA;;;;"}
@@ -0,0 +1,64 @@
1
+ import { jsx } from '@apia/theme/jsx-runtime';
2
+ import React__default from 'react';
3
+ import { arrayOrArray, EventEmitter } from '@apia/util';
4
+ import { classToValidate, Select } from '@apia/validations';
5
+
6
+ class ApiaApiSelectOptions extends EventEmitter {
7
+ }
8
+ const apiaApiSelectOptions = new ApiaApiSelectOptions();
9
+ const ApiaApiSelect = (props) => {
10
+ const element = React__default.useMemo(() => props.element, [props.element]);
11
+ const className = React__default.useMemo(
12
+ () => element.class ? `handler__select ${element.class}` : "handler__select",
13
+ [element.class]
14
+ );
15
+ const [options, setOptions] = React__default.useState(
16
+ arrayOrArray(element.options?.option).map((currOption) => {
17
+ return { value: currOption.value, label: currOption.content };
18
+ })
19
+ );
20
+ const validationRules = React__default.useMemo(
21
+ () => ({
22
+ required: element.mandatory,
23
+ ...classToValidate(element.class)
24
+ }),
25
+ [element.class, element.mandatory]
26
+ );
27
+ React__default.useEffect(() => {
28
+ const unsuscribe = apiaApiSelectOptions.on("setOptions", (ev) => {
29
+ if (ev.fieldName === element.name) {
30
+ setOptions(
31
+ ev.options.map((currOption) => ({
32
+ value: currOption.value,
33
+ label: currOption.content
34
+ }))
35
+ );
36
+ }
37
+ });
38
+ return () => {
39
+ unsuscribe();
40
+ };
41
+ }, [element.name]);
42
+ const initialValue = React__default.useMemo(
43
+ () => options.find((current) => current.value === props.element.value)?.value ?? options[0]?.value ?? "",
44
+ [options, props.element.value]
45
+ );
46
+ return /* @__PURE__ */ jsx(
47
+ Select,
48
+ {
49
+ className,
50
+ name: element.id || element.name,
51
+ label: element.text,
52
+ title: element.title || element.text,
53
+ initialValue,
54
+ disabled: element.readonly || element.disabled,
55
+ validationRules,
56
+ options,
57
+ onChange: element.onChange
58
+ }
59
+ );
60
+ };
61
+ ApiaApiSelect.displayName = "ApiaApiSelect";
62
+
63
+ export { ApiaApiSelect, apiaApiSelectOptions };
64
+ //# sourceMappingURL=ApiaApiSelect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiaApiSelect.js","sources":["../../src/fields/ApiaApiSelect.tsx"],"sourcesContent":["import React from 'react';\nimport { arrayOrArray, EventEmitter } from '@apia/util';\nimport { classToValidate, Select } from '@apia/validations';\nimport { TApiaApiField } from '../ApiaApiHandler';\n\nexport type TOption = {\n content: string;\n value: string;\n};\n\nclass ApiaApiSelectOptions extends EventEmitter<{\n setOptions: {\n fieldName: string;\n options: TOption[];\n };\n}> {}\n\nexport const apiaApiSelectOptions = new ApiaApiSelectOptions();\n\nexport const ApiaApiSelect = (props: TApiaApiField) => {\n const element = React.useMemo(() => props.element, [props.element]);\n const className = React.useMemo(\n () =>\n element.class ? `handler__select ${element.class}` : 'handler__select',\n [element.class],\n );\n const [options, setOptions] = React.useState<\n {\n value: string;\n label: string;\n }[]\n >(\n arrayOrArray(element.options?.option).map((currOption) => {\n return { value: currOption.value, label: currOption.content };\n }),\n );\n const validationRules = React.useMemo(\n () => ({\n required: element.mandatory,\n ...classToValidate(element.class),\n }),\n [element.class, element.mandatory],\n );\n\n React.useEffect(() => {\n const unsuscribe = apiaApiSelectOptions.on('setOptions', (ev) => {\n if (ev.fieldName === element.name) {\n setOptions(\n ev.options.map((currOption) => ({\n value: currOption.value,\n label: currOption.content,\n })),\n );\n }\n });\n\n return () => {\n unsuscribe();\n };\n }, [element.name]);\n\n const initialValue = React.useMemo(\n () =>\n options.find((current) => current.value === props.element.value)?.value ??\n options[0]?.value ??\n '',\n [options, props.element.value],\n );\n\n return (\n <Select\n className={className}\n name={element.id || element.name}\n label={element.text}\n title={element.title || element.text}\n initialValue={initialValue}\n disabled={element.readonly || element.disabled}\n validationRules={validationRules}\n options={options}\n onChange={element.onChange}\n />\n );\n};\n\nApiaApiSelect.displayName = 'ApiaApiSelect';\n"],"names":["React"],"mappings":";;;;;AAUA,MAAM,6BAA6B,YAKhC,CAAA;AAAC,CAAA;AAES,MAAA,oBAAA,GAAuB,IAAI,oBAAqB,GAAA;AAEhD,MAAA,aAAA,GAAgB,CAAC,KAAyB,KAAA;AACrD,EAAM,MAAA,OAAA,GAAUA,eAAM,OAAQ,CAAA,MAAM,MAAM,OAAS,EAAA,CAAC,KAAM,CAAA,OAAO,CAAC,CAAA,CAAA;AAClE,EAAA,MAAM,YAAYA,cAAM,CAAA,OAAA;AAAA,IACtB,MACE,OAAQ,CAAA,KAAA,GAAQ,CAAmB,gBAAA,EAAA,OAAA,CAAQ,KAAK,CAAK,CAAA,GAAA,iBAAA;AAAA,IACvD,CAAC,QAAQ,KAAK,CAAA;AAAA,GAChB,CAAA;AACA,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,cAAM,CAAA,QAAA;AAAA,IAMlC,aAAa,OAAQ,CAAA,OAAA,EAAS,MAAM,CAAE,CAAA,GAAA,CAAI,CAAC,UAAe,KAAA;AACxD,MAAA,OAAO,EAAE,KAAO,EAAA,UAAA,CAAW,KAAO,EAAA,KAAA,EAAO,WAAW,OAAQ,EAAA,CAAA;AAAA,KAC7D,CAAA;AAAA,GACH,CAAA;AACA,EAAA,MAAM,kBAAkBA,cAAM,CAAA,OAAA;AAAA,IAC5B,OAAO;AAAA,MACL,UAAU,OAAQ,CAAA,SAAA;AAAA,MAClB,GAAG,eAAgB,CAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,KAClC,CAAA;AAAA,IACA,CAAC,OAAA,CAAQ,KAAO,EAAA,OAAA,CAAQ,SAAS,CAAA;AAAA,GACnC,CAAA;AAEA,EAAAA,cAAA,CAAM,UAAU,MAAM;AACpB,IAAA,MAAM,UAAa,GAAA,oBAAA,CAAqB,EAAG,CAAA,YAAA,EAAc,CAAC,EAAO,KAAA;AAC/D,MAAI,IAAA,EAAA,CAAG,SAAc,KAAA,OAAA,CAAQ,IAAM,EAAA;AACjC,QAAA,UAAA;AAAA,UACE,EAAG,CAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,UAAgB,MAAA;AAAA,YAC9B,OAAO,UAAW,CAAA,KAAA;AAAA,YAClB,OAAO,UAAW,CAAA,OAAA;AAAA,WAClB,CAAA,CAAA;AAAA,SACJ,CAAA;AAAA,OACF;AAAA,KACD,CAAA,CAAA;AAED,IAAA,OAAO,MAAM;AACX,MAAW,UAAA,EAAA,CAAA;AAAA,KACb,CAAA;AAAA,GACC,EAAA,CAAC,OAAQ,CAAA,IAAI,CAAC,CAAA,CAAA;AAEjB,EAAA,MAAM,eAAeA,cAAM,CAAA,OAAA;AAAA,IACzB,MACE,OAAA,CAAQ,IAAK,CAAA,CAAC,YAAY,OAAQ,CAAA,KAAA,KAAU,KAAM,CAAA,OAAA,CAAQ,KAAK,CAAG,EAAA,KAAA,IAClE,OAAQ,CAAA,CAAC,GAAG,KACZ,IAAA,EAAA;AAAA,IACF,CAAC,OAAA,EAAS,KAAM,CAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,GAC/B,CAAA;AAEA,EACE,uBAAA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,IAAA,EAAM,OAAQ,CAAA,EAAA,IAAM,OAAQ,CAAA,IAAA;AAAA,MAC5B,OAAO,OAAQ,CAAA,IAAA;AAAA,MACf,KAAA,EAAO,OAAQ,CAAA,KAAA,IAAS,OAAQ,CAAA,IAAA;AAAA,MAChC,YAAA;AAAA,MACA,QAAA,EAAU,OAAQ,CAAA,QAAA,IAAY,OAAQ,CAAA,QAAA;AAAA,MACtC,eAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAU,OAAQ,CAAA,QAAA;AAAA,KAAA;AAAA,GACpB,CAAA;AAEJ,EAAA;AAEA,aAAA,CAAc,WAAc,GAAA,eAAA;;;;"}