@dartcom/ui-kit 10.1.12 → 10.1.14

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 (43) hide show
  1. package/dist/components/accordion/accordion.d.ts +11 -0
  2. package/dist/components/accordion/accordion.d.ts.map +1 -0
  3. package/dist/components/accordion/accordion.stories.d.ts +8 -0
  4. package/dist/components/accordion/accordion.stories.d.ts.map +1 -0
  5. package/dist/components/accordion/index.d.ts +2 -0
  6. package/dist/components/accordion/index.d.ts.map +1 -0
  7. package/dist/components/accordion/types.d.ts +10 -0
  8. package/dist/components/accordion/types.d.ts.map +1 -0
  9. package/dist/components/index.d.ts +2 -0
  10. package/dist/components/index.d.ts.map +1 -1
  11. package/dist/components/layers/leaflet/layers/traffic-sign/config/constants.d.ts +7 -0
  12. package/dist/components/layers/leaflet/layers/traffic-sign/config/constants.d.ts.map +1 -1
  13. package/dist/components/layers/leaflet/layers/traffic-sign/traffic-sign-dop/ui/forms/create/create.d.ts.map +1 -1
  14. package/dist/components/layers/leaflet/layers/traffic-sign/traffic-sign-dop/ui/forms/update/update.d.ts.map +1 -1
  15. package/dist/components/layers/leaflet/layers/traffic-sign/ui/buttons/add-dop/add-dop.d.ts +9 -0
  16. package/dist/components/layers/leaflet/layers/traffic-sign/ui/buttons/add-dop/add-dop.d.ts.map +1 -0
  17. package/dist/components/layers/leaflet/layers/traffic-sign/ui/buttons/add-dop/index.d.ts +2 -0
  18. package/dist/components/layers/leaflet/layers/traffic-sign/ui/buttons/add-dop/index.d.ts.map +1 -0
  19. package/dist/components/layers/leaflet/layers/traffic-sign/ui/buttons/index.d.ts +2 -0
  20. package/dist/components/layers/leaflet/layers/traffic-sign/ui/buttons/index.d.ts.map +1 -0
  21. package/dist/components/layers/leaflet/layers/traffic-sign/ui/forms/create/create.d.ts.map +1 -1
  22. package/dist/components/layers/leaflet/layers/traffic-sign/ui/forms/create/schema.d.ts.map +1 -1
  23. package/dist/components/layers/leaflet/layers/traffic-sign/ui/forms/update/schema.d.ts.map +1 -1
  24. package/dist/components/layers/leaflet/layers/traffic-sign/ui/forms/update/update.d.ts.map +1 -1
  25. package/dist/components/layers/leaflet/layers/traffic-sign/ui/index.d.ts +1 -0
  26. package/dist/components/layers/leaflet/layers/traffic-sign/ui/index.d.ts.map +1 -1
  27. package/dist/components/layers/leaflet/lib/hooks/useGetLeafletLayer.d.ts +8 -12
  28. package/dist/components/layers/leaflet/lib/hooks/useGetLeafletLayer.d.ts.map +1 -1
  29. package/dist/components/layers/leaflet/lib/types.d.ts +6 -5
  30. package/dist/components/layers/leaflet/lib/types.d.ts.map +1 -1
  31. package/dist/components/tabs/index.d.ts +2 -0
  32. package/dist/components/tabs/index.d.ts.map +1 -0
  33. package/dist/components/tabs/tabs.d.ts +11 -0
  34. package/dist/components/tabs/tabs.d.ts.map +1 -0
  35. package/dist/components/tabs/tabs.stories.d.ts +7 -0
  36. package/dist/components/tabs/tabs.stories.d.ts.map +1 -0
  37. package/dist/components/tabs/types.d.ts +7 -0
  38. package/dist/components/tabs/types.d.ts.map +1 -0
  39. package/dist/index.cjs +314 -260
  40. package/dist/index.cjs.map +1 -1
  41. package/dist/index.esm.js +4 -4
  42. package/dist/index.esm.js.map +1 -1
  43. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -15,8 +15,8 @@ var reactDom = require('react-dom');
15
15
  var axios = require('axios');
16
16
  var xDatePickers = require('@mui/x-date-pickers');
17
17
  var AdapterDateFns = require('@mui/x-date-pickers/AdapterDateFns');
18
- var DateField$1 = require('@mui/x-date-pickers/DateField');
19
18
  var ArrowDownwardIcon = require('@mui/icons-material/ArrowDownward');
19
+ var DateField$1 = require('@mui/x-date-pickers/DateField');
20
20
  var lab = require('@mui/lab');
21
21
  var Box = require('@mui/material/Box');
22
22
  var Modal = require('@mui/material/Modal');
@@ -23361,6 +23361,13 @@ const trafficSignDateFields = [
23361
23361
  'warranty_expr_date',
23362
23362
  ];
23363
23363
  const trafficSignDateFormat = 'dd.MM.yyyy';
23364
+ const maxTrafficSignDopsCount = 2;
23365
+ const trafficSignWords = {
23366
+ title: 'Дорожные знаки',
23367
+ };
23368
+ const trafficSignDopWords = {
23369
+ title: 'Дополнительная информация',
23370
+ };
23364
23371
 
23365
23372
  const getTrafficSignLayers = (source) => {
23366
23373
  const layers = [];
@@ -27093,6 +27100,33 @@ const TrafficSignTable = ({ pageSize = 15, defaultValues, filtered = {}, onSelec
27093
27100
  };
27094
27101
  var TrafficSignTable$1 = observer(TrafficSignTable);
27095
27102
 
27103
+ const Accordion = ({ items, onOpen, defaultValue = null, }) => {
27104
+ const [currentValue, setCurrentValue] = React__namespace.useState(defaultValue);
27105
+ const handleClose = React__namespace.useCallback(() => {
27106
+ setCurrentValue(null);
27107
+ }, []);
27108
+ React__namespace.useEffect(() => {
27109
+ if (defaultValue) {
27110
+ setCurrentValue(defaultValue);
27111
+ }
27112
+ }, [defaultValue]);
27113
+ const id = React__namespace.useId();
27114
+ return (jsxRuntime.jsx(material.Box, { id: id, children: items.map(({ value, summary, getDetails }) => {
27115
+ const key = `${id}-accordion-${value}`;
27116
+ return (jsxRuntime.jsxs(material.Accordion, { expanded: value === currentValue, children: [jsxRuntime.jsx(material.AccordionSummary, { expandIcon: jsxRuntime.jsx(ArrowDownwardIcon, {}), onClick: () => {
27117
+ setCurrentValue((prevState) => {
27118
+ if (prevState === value) {
27119
+ return null;
27120
+ }
27121
+ onOpen?.(value);
27122
+ return value;
27123
+ });
27124
+ }, "aria-controls": `${key}-content`, id: `${key}-header`, children: summary }), jsxRuntime.jsx(material.AccordionDetails, { children: getDetails({
27125
+ onClose: handleClose,
27126
+ }) })] }, key));
27127
+ }) }));
27128
+ };
27129
+
27096
27130
  const CustomCard = ({ children, sx = {}, ...props }) => {
27097
27131
  return (jsxRuntime.jsx(material.Box, { ...props, sx: {
27098
27132
  padding: '20px 15px',
@@ -27115,33 +27149,60 @@ function DateField({ name, ...props }) {
27115
27149
  } }));
27116
27150
  }
27117
27151
 
27152
+ const Tabs = ({ items, initialValue, onChange }) => {
27153
+ const [value, setValue] = React__namespace.useState(() => initialValue ?? items[0].value);
27154
+ const id = React__namespace.useId();
27155
+ React__namespace.useEffect(() => {
27156
+ if (initialValue) {
27157
+ setValue(initialValue);
27158
+ }
27159
+ }, [initialValue]);
27160
+ return (jsxRuntime.jsxs(lab.TabContext, { value: value, children: [jsxRuntime.jsx(material.Box, { sx: { borderBottom: 1, borderColor: 'divider' }, children: jsxRuntime.jsx(lab.TabList, { "aria-label": `tabs-${id}`, onChange: (_, value) => {
27161
+ setValue(value);
27162
+ onChange?.(value);
27163
+ }, children: items.map(({ label, value }) => {
27164
+ const key = `${id}-tab-${value}`;
27165
+ return (jsxRuntime.jsx(material.Tab, { label: label, value: value, sx: {
27166
+ textTransform: 'none',
27167
+ } }, key));
27168
+ }) }) }), items.map(({ content, value }) => {
27169
+ const key = `${id}-tab-panel-${value}`;
27170
+ return (jsxRuntime.jsx(lab.TabPanel, { value: value, children: content }, key));
27171
+ })] }));
27172
+ };
27173
+
27118
27174
  const fieldName$1 = 'oldDops';
27119
27175
  const TrafficSignDopUpdateForm = ({ index, onDelete, onUpdate, }) => {
27120
- const [expanded, setExpanded] = React__namespace.useState(false);
27121
27176
  const { register, setValue, watch } = useFormContext$1();
27122
27177
  const trafficSign = watch(`${fieldName$1}.${index}`);
27123
27178
  const { dop_sign_number } = trafficSign;
27124
27179
  return (jsxRuntime.jsxs(material.Box, { sx: {
27125
27180
  display: 'grid',
27126
27181
  gap: '12px',
27127
- }, children: [jsxRuntime.jsxs(material.Accordion, { expanded: expanded, children: [jsxRuntime.jsx(material.AccordionSummary, { expandIcon: jsxRuntime.jsx(ArrowDownwardIcon, {}), onClick: () => {
27128
- setExpanded((prevState) => !prevState);
27129
- }, "aria-controls": "panel1-content", id: "panel1-header", children: jsxRuntime.jsxs(material.Box, { sx: {
27182
+ }, children: [jsxRuntime.jsx(Accordion, { items: [
27183
+ {
27184
+ value: 1,
27185
+ summary: (jsxRuntime.jsxs(material.Box, { sx: {
27130
27186
  display: 'flex',
27131
27187
  alignItems: 'center',
27132
27188
  gap: '12px',
27133
27189
  }, children: [jsxRuntime.jsx(DeleteButton, { notification: {
27134
- title: 'Удалить traffic sign',
27135
- description: 'Вы действительно хотите удалить данный traffic sign?',
27190
+ title: 'Удалить табличку',
27191
+ description: 'Вы действительно хотите удалить данную табличку?',
27136
27192
  }, onDelete: () => {
27137
27193
  onDelete(trafficSign);
27138
- } }), jsxRuntime.jsx(TrafficSignPreviewTitle$1, { number: dop_sign_number })] }) }), jsxRuntime.jsx(material.AccordionDetails, { children: jsxRuntime.jsx(TrafficSignTable$1, { pageSize: 5, filtered: {
27139
- type: false,
27140
- }, trafficSigns: trafficSignsDop, onSelect: ({ title, number }) => {
27141
- setValue(`${fieldName$1}.${index}.dop_sign_number`, number);
27142
- setValue(`${fieldName$1}.${index}.dop_sign_title`, title);
27143
- setExpanded(false);
27144
- } }) })] }), jsxRuntime.jsx(FormSelect, { ...register(`${fieldName$1}.${index}.status`), label: trafficSignFieldsTitles.status, items: trafficSignStatusOptions, getKey: ({ value }) => value, getLabel: ({ label }) => label, getValue: ({ value }) => value }), jsxRuntime.jsx(CustomInput, { ...register(`${fieldName$1}.${index}.comment`), label: trafficSignFieldsTitles.comment }), jsxRuntime.jsx(CustomInput, { ...register(`${fieldName$1}.${index}.dop_sign_text`), label: trafficSignFieldsTitles.dop_sign_text }), jsxRuntime.jsxs(material.Box, { sx: {
27194
+ } }), jsxRuntime.jsx(TrafficSignPreviewTitle$1, { number: dop_sign_number })] })),
27195
+ getDetails: ({ onClose }) => {
27196
+ return (jsxRuntime.jsx(TrafficSignTable$1, { pageSize: 5, filtered: {
27197
+ type: false,
27198
+ }, trafficSigns: trafficSignsDop, onSelect: ({ title, number }) => {
27199
+ setValue(`${fieldName$1}.${index}.dop_sign_number`, number);
27200
+ setValue(`${fieldName$1}.${index}.dop_sign_title`, title);
27201
+ onClose();
27202
+ } }));
27203
+ },
27204
+ },
27205
+ ] }), jsxRuntime.jsx(FormSelect, { ...register(`${fieldName$1}.${index}.status`), label: trafficSignFieldsTitles.status, items: trafficSignStatusOptions, getKey: ({ value }) => value, getLabel: ({ label }) => label, getValue: ({ value }) => value }), jsxRuntime.jsx(CustomInput, { ...register(`${fieldName$1}.${index}.comment`), label: trafficSignFieldsTitles.comment }), jsxRuntime.jsx(CustomInput, { ...register(`${fieldName$1}.${index}.dop_sign_text`), label: trafficSignFieldsTitles.dop_sign_text }), jsxRuntime.jsxs(material.Box, { sx: {
27145
27206
  display: 'grid',
27146
27207
  gridTemplateColumns: 'repeat(2, 1fr)',
27147
27208
  gap: '12px',
@@ -27153,33 +27214,34 @@ var TrafficSignDopUpdateForm$1 = observer(TrafficSignDopUpdateForm);
27153
27214
 
27154
27215
  const fieldName = 'newDops';
27155
27216
  const TrafficSignDopCreateForm = ({ index, onDelete, }) => {
27156
- const { palette } = material.useTheme();
27157
- const [expanded, setExpanded] = React__namespace.useState(false);
27158
27217
  const { setValue, register, watch } = useFormContext$1();
27159
27218
  const trafficSign = watch(`${fieldName}.${index}`);
27160
27219
  const { dop_sign_number } = trafficSign;
27161
27220
  return (jsxRuntime.jsxs(material.Box, { sx: {
27162
27221
  display: 'grid',
27163
27222
  gap: '12px',
27164
- }, children: [jsxRuntime.jsxs(material.Accordion, { expanded: expanded, children: [jsxRuntime.jsx(material.AccordionSummary, { expandIcon: jsxRuntime.jsx(ArrowDownwardIcon, {}), onClick: () => {
27165
- setExpanded((prevState) => !prevState);
27166
- }, "aria-controls": "panel1-content", id: "panel1-header", children: jsxRuntime.jsxs(material.Box, { sx: {
27223
+ }, children: [jsxRuntime.jsx(Accordion, { items: [
27224
+ {
27225
+ value: 1,
27226
+ summary: (jsxRuntime.jsxs(material.Box, { sx: {
27167
27227
  display: 'flex',
27168
27228
  alignItems: 'center',
27169
27229
  gap: '12px',
27170
- }, children: [jsxRuntime.jsx(Paragraph, { variant: "h6", color: "error", sx: {
27171
- fontWeight: 700,
27172
- color: palette.primary['main'],
27173
- }, children: "NEW" }), jsxRuntime.jsx(DeleteButton, { notification: {
27174
- title: 'Удалить traffic sign',
27175
- description: 'Вы действительно хотите удалить данный traffic sign?',
27176
- }, onDelete: onDelete }), jsxRuntime.jsx(TrafficSignPreviewTitle$1, { number: dop_sign_number })] }) }), jsxRuntime.jsx(material.AccordionDetails, { children: jsxRuntime.jsx(TrafficSignTable$1, { pageSize: 5, filtered: {
27177
- type: false,
27178
- }, trafficSigns: trafficSignsDop, onSelect: ({ title, number }) => {
27179
- setValue(`${fieldName}.${index}.dop_sign_number`, number);
27180
- setValue(`${fieldName}.${index}.dop_sign_title`, title);
27181
- setExpanded(false);
27182
- } }) })] }), jsxRuntime.jsx(FormSelect, { ...register(`${fieldName}.${index}.status`), label: trafficSignFieldsTitles.status, items: trafficSignStatusOptions, getKey: ({ value }) => value, getLabel: ({ label }) => label, getValue: ({ value }) => value }), jsxRuntime.jsx(CustomInput, { ...register(`${fieldName}.${index}.comment`), label: trafficSignFieldsTitles.comment }), jsxRuntime.jsx(CustomInput, { ...register(`${fieldName}.${index}.dop_sign_text`), label: trafficSignFieldsTitles.dop_sign_text }), jsxRuntime.jsxs(material.Box, { sx: {
27230
+ }, children: [jsxRuntime.jsx(DeleteButton, { notification: {
27231
+ title: 'Удалить табличку',
27232
+ description: 'Вы действительно хотите удалить данную табличку?',
27233
+ }, onDelete: onDelete }), jsxRuntime.jsx(TrafficSignPreviewTitle$1, { number: dop_sign_number })] })),
27234
+ getDetails: ({ onClose }) => {
27235
+ return (jsxRuntime.jsx(TrafficSignTable$1, { pageSize: 5, filtered: {
27236
+ type: false,
27237
+ }, trafficSigns: trafficSignsDop, onSelect: ({ title, number }) => {
27238
+ setValue(`${fieldName}.${index}.dop_sign_number`, number);
27239
+ setValue(`${fieldName}.${index}.dop_sign_title`, title);
27240
+ onClose();
27241
+ } }));
27242
+ },
27243
+ },
27244
+ ] }), jsxRuntime.jsx(FormSelect, { ...register(`${fieldName}.${index}.status`), label: trafficSignFieldsTitles.status, items: trafficSignStatusOptions, getKey: ({ value }) => value, getLabel: ({ label }) => label, getValue: ({ value }) => value }), jsxRuntime.jsx(CustomInput, { ...register(`${fieldName}.${index}.comment`), label: trafficSignFieldsTitles.comment }), jsxRuntime.jsx(CustomInput, { ...register(`${fieldName}.${index}.dop_sign_text`), label: trafficSignFieldsTitles.dop_sign_text }), jsxRuntime.jsxs(material.Box, { sx: {
27183
27245
  display: 'grid',
27184
27246
  gridTemplateColumns: 'repeat(2, 1fr)',
27185
27247
  gap: '12px',
@@ -27187,6 +27249,13 @@ const TrafficSignDopCreateForm = ({ index, onDelete, }) => {
27187
27249
  };
27188
27250
  var TrafficSignDopCreateForm$1 = observer(TrafficSignDopCreateForm);
27189
27251
 
27252
+ const TrafficSignAddDopButton = ({ disabled = false, onClick, }) => {
27253
+ return (jsxRuntime.jsx(Button, { sx: {
27254
+ margin: '0 auto',
27255
+ }, onClick: onClick, disabled: disabled, children: "\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0442\u0430\u0431\u043B\u0438\u0447\u043A\u0443" }));
27256
+ };
27257
+ var TrafficSignAddDopButton$1 = observer(TrafficSignAddDopButton);
27258
+
27190
27259
  const TrafficSignPreviewTitle = ({ number, }) => {
27191
27260
  const title = getTrafficSignTitleByNumber(number);
27192
27261
  return (jsxRuntime.jsxs(material.Box, { sx: {
@@ -29846,8 +29915,14 @@ const schema$2 = create$3()
29846
29915
  ...mainFieldsSchema,
29847
29916
  ...datesFieldsSchema,
29848
29917
  ...idsFieldsSchema,
29849
- oldDops: create$2().of(updatedTrafficSignDopSchema).required(),
29850
- newDops: create$2().of(createdTrafficSignDopSchema).required(),
29918
+ oldDops: create$2()
29919
+ .max(maxTrafficSignDopsCount)
29920
+ .of(updatedTrafficSignDopSchema)
29921
+ .required(),
29922
+ newDops: create$2()
29923
+ .max(maxTrafficSignDopsCount)
29924
+ .of(createdTrafficSignDopSchema)
29925
+ .required(),
29851
29926
  });
29852
29927
 
29853
29928
  const r=(t,r,o)=>{if(t&&"reportValidity"in t){const s=get(o,r);t.setCustomValidity(s&&s.message||""),t.reportValidity();}},o$1=(e,t)=>{for(const o in t.fields){const s=t.fields[o];s&&s.ref&&"reportValidity"in s.ref?r(s.ref,o,e):s&&s.refs&&s.refs.forEach(t=>r(t,o,e));}},s=(r,s)=>{s.shouldUseNativeValidation&&o$1(r,s);const n={};for(const o in r){const f=get(s.fields,o),c=Object.assign(r[o]||{},{ref:f&&f.ref});if(i$1(s.names||Object.keys(r),o)){const r=Object.assign({},get(n,o));set(r,"root",c),set(n,o,r);}else set(n,o,c);}return n},i$1=(e,t)=>{const r=n(t);return e.some(e=>n(e).match(`^${r}\\.\\d+`))};function n(e){return e.replace(/\]|\[/g,"")}
@@ -29855,11 +29930,6 @@ const r=(t,r,o)=>{if(t&&"reportValidity"in t){const s=get(o,r);t.setCustomValidi
29855
29930
  function o(o,n,s$1){return void 0===s$1&&(s$1={}),function(a,i,c){try{return Promise.resolve(function(t,r){try{var u=(null!=n&&n.context&&"development"===process.env.NODE_ENV&&console.warn("You should not used the yup options context. Please, use the 'useForm' context object instead"),Promise.resolve(o["sync"===s$1.mode?"validateSync":"validate"](a,Object.assign({abortEarly:!1},n,{context:i}))).then(function(t){return c.shouldUseNativeValidation&&o$1({},c),{values:s$1.raw?Object.assign({},a):t,errors:{}}}));}catch(e){return r(e)}return u&&u.then?u.then(void 0,r):u}(0,function(e){if(!e.inner)throw e;return {values:{},errors:s((o=e,n=!c.shouldUseNativeValidation&&"all"===c.criteriaMode,(o.inner||[]).reduce(function(e,t){if(e[t.path]||(e[t.path]={message:t.message,type:t.type}),n){var o=e[t.path].types,s=o&&o[t.type];e[t.path]=appendErrors(t.path,n,e,t.type,s?[].concat(s,t.message):t.message);}return e},{})),c)};var o,n;}))}catch(e){return Promise.reject(e)}}}
29856
29931
 
29857
29932
  const TrafficSignUpdateForm = ({ trafficSign, onSubmit, onDelete, onDeleteDop, onUpdateDop, }) => {
29858
- const [tabsValue, setTabsValue] = React__namespace.useState('1');
29859
- const handleChange = React__namespace.useCallback((_, newValue) => {
29860
- setTabsValue(newValue);
29861
- }, []);
29862
- const [expanded, setExpanded] = React__namespace.useState(false);
29863
29933
  const defaultValues = React__namespace.useMemo(() => {
29864
29934
  const { dops, traffic_sign_id } = trafficSign;
29865
29935
  const defaultValues = {
@@ -29887,6 +29957,15 @@ const TrafficSignUpdateForm = ({ trafficSign, onSubmit, onDelete, onDeleteDop, o
29887
29957
  control,
29888
29958
  name: 'newDops',
29889
29959
  });
29960
+ const isAddNewDop = React__namespace.useMemo(() => {
29961
+ const isAddNewDop = oldDopsFieldArray.fields.length + newDopsFieldArray.fields.length <
29962
+ maxTrafficSignDopsCount;
29963
+ return isAddNewDop;
29964
+ }, [
29965
+ oldDopsFieldArray.fields.length,
29966
+ newDopsFieldArray.fields.length,
29967
+ maxTrafficSignDopsCount,
29968
+ ]);
29890
29969
  const number = watch('traffic_sign_number');
29891
29970
  React__namespace.useEffect(() => {
29892
29971
  const isErrors = Object.keys(errors).length > 0;
@@ -29901,43 +29980,56 @@ const TrafficSignUpdateForm = ({ trafficSign, onSubmit, onDelete, onDeleteDop, o
29901
29980
  React__namespace.useEffect(() => {
29902
29981
  reset(defaultValues);
29903
29982
  }, [trafficSign]);
29904
- return (jsxRuntime.jsxs(CustomForm, { form: form, onSubmit: onSubmit, children: [jsxRuntime.jsxs(lab.TabContext, { value: tabsValue, children: [jsxRuntime.jsx(material.Box, { sx: { borderBottom: 1, borderColor: 'divider' }, children: jsxRuntime.jsxs(lab.TabList, { onChange: handleChange, "aria-label": "lab API tabs example", children: [jsxRuntime.jsx(material.Tab, { label: "Traffic Sign", value: "1", sx: {
29905
- textTransform: 'none',
29906
- } }), jsxRuntime.jsx(material.Tab, { label: "Traffic Sign Dop", value: "2", sx: {
29907
- textTransform: 'none',
29908
- } })] }) }), jsxRuntime.jsx(lab.TabPanel, { value: "1", children: jsxRuntime.jsxs(material.Box, { sx: {
29983
+ return (jsxRuntime.jsxs(CustomForm, { form: form, onSubmit: onSubmit, children: [jsxRuntime.jsx(Tabs, { items: [
29984
+ {
29985
+ label: trafficSignWords.title,
29986
+ value: 1,
29987
+ content: (jsxRuntime.jsxs(material.Box, { sx: {
29909
29988
  display: 'grid',
29910
29989
  gap: '12px',
29911
- }, children: [jsxRuntime.jsxs(material.Accordion, { expanded: expanded, children: [jsxRuntime.jsx(material.AccordionSummary, { expandIcon: jsxRuntime.jsx(ArrowDownwardIcon, {}), onClick: () => {
29912
- setExpanded((prevState) => !prevState);
29913
- }, "aria-controls": "panel1-content", id: "panel1-header", children: jsxRuntime.jsxs(material.Box, { sx: {
29990
+ }, children: [jsxRuntime.jsx(Accordion, { items: [
29991
+ {
29992
+ value: 1,
29993
+ summary: (jsxRuntime.jsxs(material.Box, { sx: {
29914
29994
  display: 'flex',
29915
29995
  alignItems: 'center',
29916
29996
  gap: '12px',
29917
29997
  }, children: [jsxRuntime.jsx(DeleteButton, { notification: {
29918
- title: 'Удалить traffic sign',
29919
- description: 'Вы действительно хотите удалить данный traffic sign?',
29998
+ title: 'Удалить дорожный знак',
29999
+ description: 'Вы действительно хотите удалить данный дорожный знак?',
29920
30000
  }, onDelete: () => {
29921
30001
  onDelete(trafficSign);
29922
- } }), jsxRuntime.jsx(TrafficSignPreviewTitle$1, { number: number })] }) }), jsxRuntime.jsx(material.AccordionDetails, { children: jsxRuntime.jsx(TrafficSignTable$1, { trafficSigns: trafficSigns, pageSize: 5, onSelect: ({ title, number, type }) => {
29923
- setValue('traffic_sign_number', number);
29924
- setValue('traffic_sign_title', title);
29925
- setValue('traffic_sign_type', type);
29926
- setExpanded(false);
29927
- } }) })] }), jsxRuntime.jsx(FormSelect, { ...register('status'), label: trafficSignFieldsTitles.status, items: trafficSignStatusOptions, getKey: ({ value }) => value, getLabel: ({ label }) => label, getValue: ({ value }) => value }), jsxRuntime.jsx(CustomInput, { ...register('traffic_sign_value'), label: trafficSignFieldsTitles.traffic_sign_value }), jsxRuntime.jsx(CustomInput, { ...register('comment'), label: trafficSignFieldsTitles.comment }), jsxRuntime.jsx(CustomInput, { ...register('direction'), label: trafficSignFieldsTitles.direction, type: "number" }), jsxRuntime.jsxs(material.Box, { sx: {
30002
+ } }), jsxRuntime.jsx(TrafficSignPreviewTitle$1, { number: number })] })),
30003
+ getDetails: ({ onClose }) => {
30004
+ return (jsxRuntime.jsx(TrafficSignTable$1, { trafficSigns: trafficSigns, pageSize: 5, onSelect: ({ title, number, type }) => {
30005
+ setValue('traffic_sign_number', number);
30006
+ setValue('traffic_sign_title', title);
30007
+ setValue('traffic_sign_type', type);
30008
+ onClose();
30009
+ } }));
30010
+ },
30011
+ },
30012
+ ] }), jsxRuntime.jsx(FormSelect, { ...register('status'), label: trafficSignFieldsTitles.status, items: trafficSignStatusOptions, getKey: ({ value }) => value, getLabel: ({ label }) => label, getValue: ({ value }) => value }), jsxRuntime.jsx(CustomInput, { ...register('traffic_sign_value'), label: trafficSignFieldsTitles.traffic_sign_value }), jsxRuntime.jsx(CustomInput, { ...register('comment'), label: trafficSignFieldsTitles.comment }), jsxRuntime.jsx(CustomInput, { ...register('direction'), label: trafficSignFieldsTitles.direction, type: "number" }), jsxRuntime.jsxs(material.Box, { sx: {
29928
30013
  display: 'grid',
29929
30014
  gridTemplateColumns: 'repeat(2, 1fr)',
29930
30015
  gap: '12px',
29931
- }, children: [jsxRuntime.jsx(DateField, { ...register('placement_date'), label: trafficSignFieldsTitles.placement_date, format: trafficSignDateFormat }), jsxRuntime.jsx(DateField, { ...register('verification_date'), label: trafficSignFieldsTitles.verification_date, format: trafficSignDateFormat }), jsxRuntime.jsx(DateField, { ...register('future_maintanance_date'), label: trafficSignFieldsTitles.future_maintanance_date, format: trafficSignDateFormat }), jsxRuntime.jsx(DateField, { ...register('rapair_performed_date'), label: trafficSignFieldsTitles.rapair_performed_date, format: trafficSignDateFormat }), jsxRuntime.jsx(DateField, { ...register('warranty_expr_date'), label: trafficSignFieldsTitles.warranty_expr_date, format: trafficSignDateFormat })] })] }) }), jsxRuntime.jsx(lab.TabPanel, { value: "2", children: jsxRuntime.jsxs(material.Box, { sx: {
30016
+ }, children: [jsxRuntime.jsx(DateField, { ...register('placement_date'), label: trafficSignFieldsTitles.placement_date, format: trafficSignDateFormat }), jsxRuntime.jsx(DateField, { ...register('verification_date'), label: trafficSignFieldsTitles.verification_date, format: trafficSignDateFormat }), jsxRuntime.jsx(DateField, { ...register('future_maintanance_date'), label: trafficSignFieldsTitles.future_maintanance_date, format: trafficSignDateFormat }), jsxRuntime.jsx(DateField, { ...register('rapair_performed_date'), label: trafficSignFieldsTitles.rapair_performed_date, format: trafficSignDateFormat }), jsxRuntime.jsx(DateField, { ...register('warranty_expr_date'), label: trafficSignFieldsTitles.warranty_expr_date, format: trafficSignDateFormat })] })] })),
30017
+ },
30018
+ {
30019
+ label: trafficSignDopWords.title,
30020
+ value: 2,
30021
+ content: (jsxRuntime.jsxs(material.Box, { sx: {
29932
30022
  display: 'grid',
29933
30023
  gap: '24px',
29934
- }, children: [jsxRuntime.jsx(material.Box, { children: jsxRuntime.jsx(Button, { onClick: () => {
29935
- newDopsFieldArray.append({
29936
- ...createdTrafficSignDop,
29937
- });
29938
- }, children: "\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043D\u043E\u0432\u044B\u0439 traffic sign" }) }), oldDopsFieldArray.fields.map(({ id }, index) => (jsxRuntime.jsx(CustomCard, { children: jsxRuntime.jsx(TrafficSignDopUpdateForm$1, { index: index, onDelete: onDeleteDop, onUpdate: onUpdateDop }) }, id))), newDopsFieldArray.fields.map(({ id }, index) => (jsxRuntime.jsx(CustomCard, { children: jsxRuntime.jsx(TrafficSignDopCreateForm$1, { onDelete: () => {
30024
+ }, children: [jsxRuntime.jsx(TrafficSignAddDopButton$1, { disabled: !isAddNewDop, onClick: () => {
30025
+ newDopsFieldArray.append({
30026
+ ...createdTrafficSignDop,
30027
+ });
30028
+ } }), oldDopsFieldArray.fields.map(({ id }, index) => (jsxRuntime.jsx(CustomCard, { children: jsxRuntime.jsx(TrafficSignDopUpdateForm$1, { index: index, onDelete: onDeleteDop, onUpdate: onUpdateDop }) }, id))), newDopsFieldArray.fields.map(({ id }, index) => (jsxRuntime.jsx(CustomCard, { children: jsxRuntime.jsx(TrafficSignDopCreateForm$1, { onDelete: () => {
29939
30029
  newDopsFieldArray.remove(index);
29940
- }, index: index }) }, id)))] }) })] }), jsxRuntime.jsx(Button, { type: "submit", children: "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C" })] }));
30030
+ }, index: index }) }, id)))] })),
30031
+ },
30032
+ ] }), jsxRuntime.jsx(Button, { type: "submit", children: "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C" })] }));
29941
30033
  };
29942
30034
  var update = observer(TrafficSignUpdateForm);
29943
30035
 
@@ -29945,15 +30037,13 @@ const schema$1 = create$3()
29945
30037
  .shape({
29946
30038
  ...mainFieldsSchema,
29947
30039
  ...datesFieldsSchema,
29948
- newDops: create$2().of(createdTrafficSignDopSchema).required(),
30040
+ newDops: create$2()
30041
+ .max(maxTrafficSignDopsCount)
30042
+ .of(createdTrafficSignDopSchema)
30043
+ .required(),
29949
30044
  });
29950
30045
 
29951
30046
  const TrafficSignCreateForm = ({ onSubmit, }) => {
29952
- const [tabsValue, setTabsValue] = React__namespace.useState('1');
29953
- const handleChange = (event, newValue) => {
29954
- setTabsValue(newValue);
29955
- };
29956
- const [expanded, setExpanded] = React__namespace.useState(false);
29957
30047
  const form = useForm({
29958
30048
  resolver: o(schema$1),
29959
30049
  defaultValues: {
@@ -29976,34 +30066,47 @@ const TrafficSignCreateForm = ({ onSubmit, }) => {
29976
30066
  });
29977
30067
  }
29978
30068
  }, [errors]);
29979
- return (jsxRuntime.jsxs(CustomForm, { form: form, onSubmit: onSubmit, children: [jsxRuntime.jsxs(lab.TabContext, { value: tabsValue, children: [jsxRuntime.jsx(material.Box, { sx: { borderBottom: 1, borderColor: 'divider' }, children: jsxRuntime.jsxs(lab.TabList, { onChange: handleChange, "aria-label": "lab API tabs example", children: [jsxRuntime.jsx(material.Tab, { label: "TrafficSign", value: "1", sx: {
29980
- textTransform: 'none',
29981
- } }), jsxRuntime.jsx(material.Tab, { label: "TrafficSignDop", value: "2", sx: {
29982
- textTransform: 'none',
29983
- } })] }) }), jsxRuntime.jsx(lab.TabPanel, { value: "1", children: jsxRuntime.jsxs(material.Box, { sx: {
30069
+ return (jsxRuntime.jsxs(CustomForm, { form: form, onSubmit: onSubmit, children: [jsxRuntime.jsx(Tabs, { items: [
30070
+ {
30071
+ label: trafficSignWords.title,
30072
+ value: 1,
30073
+ content: (jsxRuntime.jsxs(material.Box, { sx: {
29984
30074
  display: 'grid',
29985
30075
  gap: '12px',
29986
- }, children: [jsxRuntime.jsxs(material.Accordion, { expanded: expanded, children: [jsxRuntime.jsx(material.AccordionSummary, { expandIcon: jsxRuntime.jsx(ArrowDownwardIcon, {}), onClick: () => {
29987
- setExpanded((prevState) => !prevState);
29988
- }, "aria-controls": "panel1-content", id: "panel1-header", children: jsxRuntime.jsx(TrafficSignPreviewTitle$1, { number: number }) }), jsxRuntime.jsx(material.AccordionDetails, { children: jsxRuntime.jsx(TrafficSignTable$1, { trafficSigns: trafficSigns, pageSize: 5, onSelect: ({ title, number, type }) => {
29989
- setValue('traffic_sign_number', number);
29990
- setValue('traffic_sign_title', title);
29991
- setValue('traffic_sign_type', type);
29992
- setExpanded(false);
29993
- } }) })] }), jsxRuntime.jsx(FormSelect, { ...register('status'), label: trafficSignFieldsTitles.status, items: trafficSignStatusOptions, getKey: ({ value }) => value, getLabel: ({ label }) => label, getValue: ({ value }) => value }), jsxRuntime.jsx(CustomInput, { ...register('traffic_sign_value'), label: trafficSignFieldsTitles.traffic_sign_value }), jsxRuntime.jsx(CustomInput, { ...register('comment'), label: trafficSignFieldsTitles.comment }), jsxRuntime.jsx(CustomInput, { ...register('direction'), label: trafficSignFieldsTitles.direction, type: "number" }), jsxRuntime.jsxs(material.Box, { sx: {
30076
+ }, children: [jsxRuntime.jsx(Accordion, { items: [
30077
+ {
30078
+ value: 1,
30079
+ summary: jsxRuntime.jsx(TrafficSignPreviewTitle$1, { number: number }),
30080
+ getDetails: ({ onClose }) => {
30081
+ return (jsxRuntime.jsx(TrafficSignTable$1, { trafficSigns: trafficSigns, pageSize: 5, onSelect: ({ title, number, type }) => {
30082
+ setValue('traffic_sign_number', number);
30083
+ setValue('traffic_sign_title', title);
30084
+ setValue('traffic_sign_type', type);
30085
+ onClose();
30086
+ } }));
30087
+ },
30088
+ },
30089
+ ] }), jsxRuntime.jsx(FormSelect, { ...register('status'), label: trafficSignFieldsTitles.status, items: trafficSignStatusOptions, getKey: ({ value }) => value, getLabel: ({ label }) => label, getValue: ({ value }) => value }), jsxRuntime.jsx(CustomInput, { ...register('traffic_sign_value'), label: trafficSignFieldsTitles.traffic_sign_value }), jsxRuntime.jsx(CustomInput, { ...register('comment'), label: trafficSignFieldsTitles.comment }), jsxRuntime.jsx(CustomInput, { ...register('direction'), label: trafficSignFieldsTitles.direction, type: "number" }), jsxRuntime.jsxs(material.Box, { sx: {
29994
30090
  display: 'grid',
29995
30091
  gridTemplateColumns: 'repeat(2, 1fr)',
29996
30092
  gap: '12px',
29997
- }, children: [jsxRuntime.jsx(DateField, { ...register('placement_date'), label: trafficSignFieldsTitles.placement_date, format: trafficSignDateFormat }), jsxRuntime.jsx(DateField, { ...register('verification_date'), label: trafficSignFieldsTitles.verification_date, format: trafficSignDateFormat }), jsxRuntime.jsx(DateField, { ...register('future_maintanance_date'), label: trafficSignFieldsTitles.future_maintanance_date, format: trafficSignDateFormat }), jsxRuntime.jsx(DateField, { ...register('rapair_performed_date'), label: trafficSignFieldsTitles.rapair_performed_date, format: trafficSignDateFormat }), jsxRuntime.jsx(DateField, { ...register('warranty_expr_date'), label: trafficSignFieldsTitles.warranty_expr_date, format: trafficSignDateFormat })] })] }) }), jsxRuntime.jsx(lab.TabPanel, { value: "2", children: jsxRuntime.jsxs(material.Box, { sx: {
30093
+ }, children: [jsxRuntime.jsx(DateField, { ...register('placement_date'), label: trafficSignFieldsTitles.placement_date, format: trafficSignDateFormat }), jsxRuntime.jsx(DateField, { ...register('verification_date'), label: trafficSignFieldsTitles.verification_date, format: trafficSignDateFormat }), jsxRuntime.jsx(DateField, { ...register('future_maintanance_date'), label: trafficSignFieldsTitles.future_maintanance_date, format: trafficSignDateFormat }), jsxRuntime.jsx(DateField, { ...register('rapair_performed_date'), label: trafficSignFieldsTitles.rapair_performed_date, format: trafficSignDateFormat }), jsxRuntime.jsx(DateField, { ...register('warranty_expr_date'), label: trafficSignFieldsTitles.warranty_expr_date, format: trafficSignDateFormat })] })] })),
30094
+ },
30095
+ {
30096
+ label: trafficSignDopWords.title,
30097
+ value: 2,
30098
+ content: (jsxRuntime.jsxs(material.Box, { sx: {
29998
30099
  display: 'grid',
29999
30100
  gap: '24px',
30000
- }, children: [jsxRuntime.jsx(material.Box, { children: jsxRuntime.jsx(Button, { onClick: () => {
30001
- newDopsFieldArray.append({
30002
- ...createdTrafficSignDop,
30003
- });
30004
- }, children: "\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043D\u043E\u0432\u044B\u0439 traffic sign" }) }), newDopsFieldArray.fields.map(({ id }, index) => (jsxRuntime.jsx(CustomCard, { children: jsxRuntime.jsx(TrafficSignDopCreateForm$1, { onDelete: () => {
30101
+ }, children: [jsxRuntime.jsx(TrafficSignAddDopButton$1, { disabled: newDopsFieldArray.fields.length === maxTrafficSignDopsCount, onClick: () => {
30102
+ newDopsFieldArray.append({
30103
+ ...createdTrafficSignDop,
30104
+ });
30105
+ } }), newDopsFieldArray.fields.map(({ id }, index) => (jsxRuntime.jsx(CustomCard, { children: jsxRuntime.jsx(TrafficSignDopCreateForm$1, { onDelete: () => {
30005
30106
  newDopsFieldArray.remove(index);
30006
- }, index: index }) }, id)))] }) })] }), jsxRuntime.jsx(Button, { type: "submit", children: "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C" })] }));
30107
+ }, index: index }) }, id)))] })),
30108
+ },
30109
+ ] }), jsxRuntime.jsx(Button, { type: "submit", children: "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C" })] }));
30007
30110
  };
30008
30111
  var create = observer(TrafficSignCreateForm);
30009
30112
 
@@ -30299,16 +30402,14 @@ const getAllLayers = (source) => {
30299
30402
  };
30300
30403
 
30301
30404
  const useGetLeafletLayer = ({ eventHandlers, }) => {
30302
- const { instance: { isValidApiKey }, } = GlobalConfig;
30303
30405
  const [layer, setLayer] = React__namespace.useState(null);
30406
+ const [config, setConfig] = React__namespace.useState(null);
30304
30407
  const scene = React__namespace.useMemo(() => {
30305
- if (layer) {
30306
- const { scene } = layer;
30307
- return scene;
30308
- }
30309
- return null;
30408
+ if (layer === null)
30409
+ return null;
30410
+ const { scene } = layer;
30411
+ return scene;
30310
30412
  }, [layer]);
30311
- const [config, setConfig] = React__namespace.useState(null);
30312
30413
  const getLeafletLayer = React__namespace.useCallback(() => {
30313
30414
  Promise.resolve().then(function () { return tangram_min; }).then(() => {
30314
30415
  if (window.Tangram) {
@@ -30347,206 +30448,153 @@ const useGetLeafletLayer = ({ eventHandlers, }) => {
30347
30448
  }
30348
30449
  });
30349
30450
  }, [eventHandlers]);
30350
- const addSource = React__namespace.useCallback((sourceName) => {
30351
- if (!scene) {
30352
- loggerService.warn({
30353
- message: 'Scene не инициализирована',
30354
- });
30355
- return;
30451
+ const checkConfig = React__namespace.useCallback((callback) => {
30452
+ if (config) {
30453
+ callback(config);
30356
30454
  }
30357
- if (!config) {
30455
+ else {
30358
30456
  loggerService.warn({
30359
30457
  message: 'Config не инициализирована',
30360
30458
  });
30361
- return;
30362
30459
  }
30363
- const url = sourceUrl[sourceName];
30364
- config.sources[sourceName] = {
30365
- tile_size,
30366
- url,
30367
- type: 'MVT',
30368
- };
30369
- scene.updateConfig({ rebuild: true });
30370
- }, [scene, config]);
30460
+ }, [config]);
30461
+ const checkScene = React__namespace.useCallback((callback) => {
30462
+ checkConfig((config) => {
30463
+ if (scene) {
30464
+ callback({
30465
+ config,
30466
+ scene,
30467
+ });
30468
+ }
30469
+ else {
30470
+ loggerService.warn({
30471
+ message: 'Scene не инициализирована',
30472
+ });
30473
+ }
30474
+ });
30475
+ }, [checkConfig, scene]);
30476
+ const addSource = React__namespace.useCallback((sourceName) => {
30477
+ checkScene(({ config, scene }) => {
30478
+ const url = sourceUrl[sourceName];
30479
+ config.sources[sourceName] = {
30480
+ tile_size,
30481
+ url,
30482
+ type: 'MVT',
30483
+ };
30484
+ scene.updateConfig({ rebuild: true });
30485
+ });
30486
+ }, [checkScene]);
30371
30487
  const deleteSource = React__namespace.useCallback((sourceName) => {
30372
- if (!scene) {
30373
- loggerService.warn({
30374
- message: 'Scene не инициализирована',
30375
- });
30376
- return;
30377
- }
30378
- if (!config) {
30379
- loggerService.warn({
30380
- message: 'Config не инициализирована',
30381
- });
30382
- return;
30383
- }
30384
- delete config.sources[sourceName];
30385
- scene.updateConfig({ rebuild: true });
30386
- }, [scene, config]);
30488
+ checkScene(({ config, scene }) => {
30489
+ delete config.sources[sourceName];
30490
+ scene.updateConfig({ rebuild: true });
30491
+ });
30492
+ }, [checkScene]);
30387
30493
  const getSource = React__namespace.useCallback((sourceName) => {
30388
- if (!config) {
30389
- loggerService.warn({
30390
- message: 'Config не инициализирована',
30391
- });
30392
- return;
30393
- }
30394
- const source = structuredClone(config.sources[sourceName]);
30494
+ let source = null;
30495
+ checkConfig((config) => {
30496
+ source = structuredClone(config.sources[sourceName]);
30497
+ });
30395
30498
  return source;
30396
- }, [config]);
30499
+ }, [checkConfig]);
30397
30500
  const updateSource = React__namespace.useCallback((sourceName, newUrl) => {
30398
- if (!scene) {
30399
- loggerService.warn({
30400
- message: 'Scene не инициализирована',
30401
- });
30402
- return;
30403
- }
30404
- if (!config) {
30405
- loggerService.warn({
30406
- message: 'Config не инициализирована',
30407
- });
30408
- return;
30409
- }
30410
- config.sources[sourceName].url = newUrl;
30411
- scene.updateConfig({ rebuild: true });
30412
- }, [config, scene]);
30501
+ checkScene(({ config, scene }) => {
30502
+ config.sources[sourceName].url = newUrl;
30503
+ scene.updateConfig({ rebuild: true });
30504
+ });
30505
+ }, [checkScene]);
30413
30506
  const reloadSource = React__namespace.useCallback((sourceName) => {
30414
30507
  deleteSource(sourceName);
30415
30508
  addSource(sourceName);
30416
- }, [updateSource]);
30509
+ }, [deleteSource, addSource]);
30417
30510
  const addLayer = React__namespace.useCallback((layer) => {
30418
- if (!scene) {
30419
- loggerService.warn({
30420
- message: 'Scene не инициализирован',
30421
- });
30422
- return;
30423
- }
30424
- if (!config) {
30425
- loggerService.warn({
30426
- message: 'Config не инициализирован',
30511
+ checkScene(({ config, scene }) => {
30512
+ const order = getLayers().length + 1;
30513
+ const validLayer = getValidLayer({
30514
+ layer,
30515
+ order,
30516
+ eventHandlers,
30427
30517
  });
30428
- return;
30429
- }
30430
- const order = getLayers().length + 1;
30431
- const validLayer = getValidLayer({
30432
- layer,
30433
- order,
30434
- eventHandlers,
30435
- });
30436
- const layerName = getLayerName(validLayer);
30437
- const { sublayers, draw, textures } = validLayer;
30438
- if (draw) {
30439
- const { styles } = draw;
30440
- if (styles) {
30441
- validLayer.draw = {
30442
- ...structuredClone(validLayer.draw),
30443
- ...structuredClone(styles),
30444
- };
30518
+ const layerName = getLayerName(validLayer);
30519
+ const { sublayers, draw, textures } = validLayer;
30520
+ if (draw) {
30521
+ const { styles } = draw;
30522
+ if (styles) {
30523
+ validLayer.draw = {
30524
+ ...structuredClone(validLayer.draw),
30525
+ ...structuredClone(styles),
30526
+ };
30527
+ }
30445
30528
  }
30446
- }
30447
- config.layers[layerName] = {
30448
- ...structuredClone(validLayer),
30449
- ...structuredClone(sublayers),
30450
- };
30451
- config.textures = {
30452
- ...structuredClone(config.textures),
30453
- ...structuredClone(textures),
30454
- };
30455
- scene.updateConfig({ rebuild: true });
30456
- return getLayers();
30457
- }, [config, scene, eventHandlers]);
30529
+ config.layers[layerName] = {
30530
+ ...structuredClone(validLayer),
30531
+ ...structuredClone(sublayers),
30532
+ };
30533
+ config.textures = {
30534
+ ...structuredClone(config.textures),
30535
+ ...structuredClone(textures),
30536
+ };
30537
+ scene.updateConfig({ rebuild: true });
30538
+ });
30539
+ }, [checkScene]);
30458
30540
  const removeLayer = React__namespace.useCallback((layer) => {
30459
- if (!scene) {
30460
- loggerService.warn({
30461
- message: 'Scene не инициализирован',
30462
- });
30463
- return;
30464
- }
30465
- if (!config) {
30466
- loggerService.warn({
30467
- message: 'Config не инициализирован',
30468
- });
30469
- return;
30470
- }
30471
30541
  const layerName = getLayerName(layer);
30472
- if (config.layers[layerName]) {
30542
+ checkScene(({ config, scene }) => {
30473
30543
  delete config.layers[layerName];
30474
- }
30475
- scene.updateConfig({ rebuild: true });
30476
- return getLayers();
30477
- }, [config, scene]);
30544
+ scene.updateConfig({ rebuild: true });
30545
+ });
30546
+ }, [checkScene]);
30478
30547
  const addStyle = React__namespace.useCallback(({ name, style }) => {
30479
- if (!scene) {
30480
- loggerService.warn({
30481
- message: 'Scene не инициализирована',
30482
- });
30483
- return;
30484
- }
30485
- if (!config) {
30486
- loggerService.warn({
30487
- message: 'Config не инициализирована',
30488
- });
30489
- return;
30490
- }
30491
- config.styles[name] = structuredClone(style);
30492
- scene.updateConfig({ rebuild: true });
30493
- }, [config, scene]);
30548
+ checkScene(({ config, scene }) => {
30549
+ config.styles[name] = structuredClone(style);
30550
+ scene.updateConfig({ rebuild: true });
30551
+ });
30552
+ }, [checkScene]);
30494
30553
  const getLayerVisibility = React__namespace.useCallback((layer) => {
30495
- if (!config) {
30496
- loggerService.warn({
30497
- message: 'Config не инициализирована',
30498
- });
30499
- return;
30500
- }
30554
+ let layerVisibility = true;
30501
30555
  const layerName = getLayerName(layer);
30502
- const { visible: layerVisibility } = config.layers[layerName];
30556
+ checkConfig((config) => {
30557
+ const { visible = true } = config.layers[layerName];
30558
+ layerVisibility = visible;
30559
+ });
30503
30560
  return layerVisibility;
30504
- }, [config]);
30561
+ }, [getLayerName, checkConfig]);
30505
30562
  const toggleLayerVisibility = React__namespace.useCallback(({ layer, visible }) => {
30506
- if (!scene) {
30507
- loggerService.warn({
30508
- message: 'Config не инициализирована',
30509
- });
30510
- return;
30511
- }
30512
- if (!config) {
30513
- loggerService.warn({
30514
- message: 'Config не инициализирована',
30515
- });
30516
- return;
30517
- }
30518
30563
  const layerName = getLayerName(layer);
30519
- config.layers[layerName].visible = visible;
30520
- scene.updateConfig();
30521
- return getLayerVisibility(layer);
30522
- }, [config, scene]);
30564
+ checkScene(({ config, scene }) => {
30565
+ config.layers[layerName].visible = visible;
30566
+ scene.updateConfig({ rebuild: true });
30567
+ });
30568
+ }, [checkScene]);
30523
30569
  const getLayers = React__namespace.useCallback(() => {
30524
- if (!config)
30525
- return [];
30526
- const { layers } = config;
30527
- return Object.keys(layers);
30528
- }, [config]);
30570
+ const layers = [];
30571
+ checkConfig((config) => {
30572
+ layers.push(...Object.keys(config.layers));
30573
+ });
30574
+ return layers;
30575
+ }, [checkConfig]);
30529
30576
  const removeLayers = React__namespace.useCallback(() => {
30530
- if (!config)
30531
- return [];
30532
- const { layers } = config;
30533
- Object.values(layers).forEach(removeLayer);
30534
- }, [config]);
30577
+ checkConfig((config) => {
30578
+ const { layers } = config;
30579
+ Object.values(layers).forEach(removeLayer);
30580
+ });
30581
+ }, [checkConfig, removeLayer]);
30535
30582
  const getSources = React__namespace.useCallback(() => {
30536
- if (!config)
30537
- return [];
30538
- const { sources } = config;
30539
- return Object.keys(sources);
30583
+ const sources = [];
30584
+ checkConfig((config) => {
30585
+ sources.push(...Object.keys(config.sources));
30586
+ });
30587
+ return sources;
30540
30588
  }, [config]);
30541
30589
  React__namespace.useEffect(() => {
30542
- if (isValidApiKey) {
30590
+ if (GlobalConfig.instance.isValidApiKey) {
30543
30591
  getLeafletLayer();
30544
30592
  }
30545
30593
  return () => {
30546
30594
  setLayer(null);
30547
30595
  setConfig(null);
30548
30596
  };
30549
- }, [isValidApiKey]);
30597
+ }, [GlobalConfig.instance.isValidApiKey]);
30550
30598
  React__namespace.useEffect(() => {
30551
30599
  addStyle({
30552
30600
  name: 'zebra_crossing',
@@ -33329,6 +33377,7 @@ var tangram_min = /*#__PURE__*/Object.freeze({
33329
33377
  __proto__: null
33330
33378
  });
33331
33379
 
33380
+ exports.Accordion = Accordion;
33332
33381
  exports.ApiService = ApiService;
33333
33382
  exports.AuthPage = AuthPage;
33334
33383
  exports.AuthStore = AuthStore;
@@ -33358,6 +33407,8 @@ exports.NoData = NoData;
33358
33407
  exports.QueryProvider = QueryProvider;
33359
33408
  exports.Select = FormSelect;
33360
33409
  exports.StoreContext = StoreContext;
33410
+ exports.Tabs = Tabs;
33411
+ exports.TrafficSignAddDopButton = TrafficSignAddDopButton$1;
33361
33412
  exports.TrafficSignCreateForm = create;
33362
33413
  exports.TrafficSignDopCreateForm = TrafficSignDopCreateForm$1;
33363
33414
  exports.TrafficSignDopUpdateForm = TrafficSignDopUpdateForm$1;
@@ -33421,6 +33472,7 @@ exports.getWaterAreaLayers = getWaterAreaLayers;
33421
33472
  exports.getWaterLinkLayers = getWaterLinkLayers;
33422
33473
  exports.imagesPath = imagesPath;
33423
33474
  exports.loggerService = loggerService;
33475
+ exports.maxTrafficSignDopsCount = maxTrafficSignDopsCount;
33424
33476
  exports.modalStore = modalStore;
33425
33477
  exports.modalStyle = modalStyle;
33426
33478
  exports.parseTrafficSignCSVFile = parseTrafficSignCSVFile;
@@ -33433,6 +33485,7 @@ exports.trafficSignBackendDates = trafficSignBackendDates;
33433
33485
  exports.trafficSignDateFields = trafficSignDateFields;
33434
33486
  exports.trafficSignDateFormat = trafficSignDateFormat;
33435
33487
  exports.trafficSignDopMainFields = trafficSignDopMainFields;
33488
+ exports.trafficSignDopWords = trafficSignDopWords;
33436
33489
  exports.trafficSignExtension = trafficSignExtension;
33437
33490
  exports.trafficSignFieldsTitles = trafficSignFieldsTitles;
33438
33491
  exports.trafficSignFrontendDates = trafficSignFrontendDates;
@@ -33440,6 +33493,7 @@ exports.trafficSignLayerName = trafficSignLayerName;
33440
33493
  exports.trafficSignMainFields = trafficSignMainFields;
33441
33494
  exports.trafficSignStatusOptions = trafficSignStatusOptions;
33442
33495
  exports.trafficSignWidths = trafficSignWidths;
33496
+ exports.trafficSignWords = trafficSignWords;
33443
33497
  exports.trafficSigns = trafficSigns;
33444
33498
  exports.trafficSignsDop = trafficSignsDop;
33445
33499
  exports.updatedTrafficSign = updatedTrafficSign;