@docsvision/management-console 6.2.0-beta.24 → 6.2.0-beta.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -1269,7 +1269,7 @@ export declare interface IDropdownOptionProps extends Omit<MenuItemProps, "butto
1269
1269
 
1270
1270
  export declare interface IDropdownWithEllipsisProps {
1271
1271
  options: IPageElementOption_2[];
1272
- value: string;
1272
+ value?: string | number;
1273
1273
  label: string;
1274
1274
  handleChange: (value: string) => void;
1275
1275
  field: ControllerRenderProps<FieldValues, string>;
@@ -2176,12 +2176,16 @@ declare interface IServiceDescription {
2176
2176
  serviceId: string;
2177
2177
  serviceName: string;
2178
2178
  configurationLayoutId: string;
2179
+ serverName: string;
2180
+ serviceUrl: string;
2179
2181
  }
2180
2182
 
2181
2183
  declare interface IServiceDescription_2 {
2182
2184
  serviceId: string;
2183
2185
  serviceName: string;
2184
2186
  configurationLayoutId: string;
2187
+ serverName: string;
2188
+ serviceUrl: string;
2185
2189
  }
2186
2190
 
2187
2191
  declare interface IServiceInfo {
@@ -2578,7 +2582,7 @@ export declare interface IWidgetPeriodSelectorProps extends HtmlProps.div {
2578
2582
  selectedValue: string;
2579
2583
  options: IPeriodValue[];
2580
2584
  onChange: (newValue: any) => void;
2581
- services: $Resources_3 & $LocalStorage_2;
2585
+ services: $Resources_3 & $ApplicationSettings_2;
2582
2586
  isLoading?: boolean;
2583
2587
  onDatesChange?: (dates: any) => void;
2584
2588
  datesValue?: string[];
package/index.js CHANGED
@@ -38637,6 +38637,7 @@ const DEFAULT_PAGE_SIZE = 50;
38637
38637
  function PageTable(props) {
38638
38638
  const { services, extraPlugins, data, onRowClick, disabledFeatures } = props;
38639
38639
  const plugins2 = [...getTablePlugins(), ...extraPlugins || []];
38640
+ const tableDisabledFeatures = Array.from(/* @__PURE__ */ new Set([...disabledFeatures || [], VirtualizationFeature]));
38640
38641
  return /* @__PURE__ */ jsx(
38641
38642
  TableComposition,
38642
38643
  {
@@ -38650,7 +38651,7 @@ function PageTable(props) {
38650
38651
  }
38651
38652
  },
38652
38653
  plugins: plugins2,
38653
- disabledFeatures,
38654
+ disabledFeatures: tableDisabledFeatures,
38654
38655
  fixateOnMount: false
38655
38656
  }
38656
38657
  );
@@ -52545,112 +52546,6 @@ function DateRangePicker(props) {
52545
52546
  return React__default.createElement(view.toolbar, __assign$2({}, props2, { locale: locale2, rangeDate: selectedRangeDate, selectableStartDate, setOpenViewYear, selectCurrentDate, includeKeyboard, keyboardOptions, setDateInvalidity, selectInputDate, startInputDate, services }));
52546
52547
  } }) });
52547
52548
  }
52548
- const dateFormatData = {
52549
- dateFormat: "DD.MM.YYYY"
52550
- };
52551
- const INPUT_FORMAT = "DD.MM.YYYY";
52552
- function DateRangeContainer(props) {
52553
- const { value, onChange, locale: locale2, onAccept, collapsedCalendar, services } = props;
52554
- const [datesValues, setDates] = useState([]);
52555
- const { resources } = services;
52556
- const acceptButtonRef = React__default.useRef(null);
52557
- const setDateInvalidity = (error) => {
52558
- acceptButtonRef.current.disabled = error;
52559
- };
52560
- const onChangeDates = (rangeDate) => {
52561
- const dates = [];
52562
- const currentMoment = hooks(rangeDate.start);
52563
- while (currentMoment.isSameOrBefore(rangeDate.end)) {
52564
- dates.push(hooks(currentMoment));
52565
- currentMoment.add(1, "days");
52566
- }
52567
- onChange(dates);
52568
- setDates(dates);
52569
- setDateInvalidity(false);
52570
- };
52571
- const formatValue = (value2) => {
52572
- const dates = value2?.map((x2) => hooks(x2, dateFormatData.dateFormat));
52573
- let start2;
52574
- let end2;
52575
- for (let i2 = 0; i2 < dates.length; i2++) {
52576
- if (!start2 || dates[i2].isBefore(start2)) {
52577
- start2 = dates[i2];
52578
- }
52579
- if (!end2 || dates[i2].isAfter(end2)) {
52580
- end2 = dates[i2];
52581
- }
52582
- }
52583
- return { start: start2, end: end2 };
52584
- };
52585
- const getInputMask = (date) => {
52586
- return date.replace(new RegExp(/[a-zA-Z]/, "g"), (x2) => x2 === "a" ? "aa" : "9");
52587
- };
52588
- const handleCancel = (e2) => {
52589
- e2.stopPropagation();
52590
- collapsedCalendar();
52591
- };
52592
- const handleAccept = (e2) => {
52593
- e2.stopPropagation();
52594
- let dates = datesValues;
52595
- if (datesValues?.length === 0 && value) {
52596
- dates = value?.map((x2) => hooks(x2, dateFormatData.dateFormat));
52597
- }
52598
- onAccept(dates);
52599
- collapsedCalendar();
52600
- };
52601
- const handleKeyDown2 = (e2) => {
52602
- if (e2.key === "Enter") {
52603
- e2.target.blur();
52604
- }
52605
- };
52606
- const dateRangeProps = {
52607
- value: formatValue(value),
52608
- onChange: onChangeDates,
52609
- locale: locale2,
52610
- services,
52611
- setDateInvalidity,
52612
- options: { variant: "static" },
52613
- includeKeyboard: true,
52614
- keyboardOptions: {
52615
- variant: "inline",
52616
- inputVariant: "outlined",
52617
- format: INPUT_FORMAT,
52618
- InputProps: {
52619
- inputComponent: ReactInputMask,
52620
- inputProps: {
52621
- mask: getInputMask(INPUT_FORMAT),
52622
- onKeyDown: handleKeyDown2
52623
- }
52624
- },
52625
- helperText: "",
52626
- InputAdornmentProps: { position: "start" }
52627
- }
52628
- };
52629
- return /* @__PURE__ */ jsxs("div", { className: "date-range__container", "data-testid": "date-range__container", children: [
52630
- /* @__PURE__ */ jsx(DateRangePicker, { ...dateRangeProps }),
52631
- /* @__PURE__ */ jsxs("div", { className: "date-range__buttons-panel", children: [
52632
- /* @__PURE__ */ jsx(
52633
- "button",
52634
- {
52635
- "data-testid": "date-range__button-cancel",
52636
- className: "date-range__button-cancel",
52637
- onClick: (e2) => handleCancel(e2),
52638
- children: resources.DateRangePicker__Cancel
52639
- }
52640
- ),
52641
- /* @__PURE__ */ jsx(
52642
- "button",
52643
- {
52644
- ref: acceptButtonRef,
52645
- "data-testid": "date-range__button-ok",
52646
- className: classNames("date-range__button-ok"),
52647
- onClick: (e2) => handleAccept(e2),
52648
- children: resources.DateRangePicker__Accept
52649
- }
52650
- )
52651
- ] })
52652
- ] });
52653
- }
52654
52549
  function commonjsRequire(path) {
52655
52550
  throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
52656
52551
  }
@@ -56785,6 +56680,117 @@ function requireRu() {
56785
56680
  return ru$1.exports;
56786
56681
  }
56787
56682
  requireRu();
56683
+ const dateFormatData = {
56684
+ dateFormat: "DD.MM.YYYY"
56685
+ };
56686
+ const INPUT_FORMAT = "DD.MM.YYYY";
56687
+ function DateRangeContainer(props) {
56688
+ const { value, onChange, locale: locale2, onAccept, collapsedCalendar, services } = props;
56689
+ const [datesValues, setDates] = useState([]);
56690
+ const { resources } = services;
56691
+ const acceptButtonRef = React__default.useRef(null);
56692
+ useEffect(() => {
56693
+ if (!locale2) return;
56694
+ const localeCode = locale2.split("-")[0].toLowerCase();
56695
+ hooks.locale(localeCode);
56696
+ }, [locale2]);
56697
+ const setDateInvalidity = (error) => {
56698
+ acceptButtonRef.current.disabled = error;
56699
+ };
56700
+ const onChangeDates = (rangeDate) => {
56701
+ const dates = [];
56702
+ const currentMoment = hooks(rangeDate.start);
56703
+ while (currentMoment.isSameOrBefore(rangeDate.end)) {
56704
+ dates.push(hooks(currentMoment));
56705
+ currentMoment.add(1, "days");
56706
+ }
56707
+ onChange(dates);
56708
+ setDates(dates);
56709
+ setDateInvalidity(false);
56710
+ };
56711
+ const formatValue = (value2) => {
56712
+ const dates = value2?.map((x2) => hooks(x2, dateFormatData.dateFormat));
56713
+ let start2;
56714
+ let end2;
56715
+ for (let i2 = 0; i2 < dates.length; i2++) {
56716
+ if (!start2 || dates[i2].isBefore(start2)) {
56717
+ start2 = dates[i2];
56718
+ }
56719
+ if (!end2 || dates[i2].isAfter(end2)) {
56720
+ end2 = dates[i2];
56721
+ }
56722
+ }
56723
+ return { start: start2, end: end2 };
56724
+ };
56725
+ const getInputMask = (date) => {
56726
+ return date.replace(new RegExp(/[a-zA-Z]/, "g"), (x2) => x2 === "a" ? "aa" : "9");
56727
+ };
56728
+ const handleCancel = (e2) => {
56729
+ e2.stopPropagation();
56730
+ collapsedCalendar();
56731
+ };
56732
+ const handleAccept = (e2) => {
56733
+ e2.stopPropagation();
56734
+ let dates = datesValues;
56735
+ if (datesValues?.length === 0 && value) {
56736
+ dates = value?.map((x2) => hooks(x2, dateFormatData.dateFormat));
56737
+ }
56738
+ onAccept(dates);
56739
+ collapsedCalendar();
56740
+ };
56741
+ const handleKeyDown2 = (e2) => {
56742
+ if (e2.key === "Enter") {
56743
+ e2.target.blur();
56744
+ }
56745
+ };
56746
+ const dateRangeProps = {
56747
+ value: formatValue(value),
56748
+ onChange: onChangeDates,
56749
+ locale: locale2,
56750
+ services,
56751
+ setDateInvalidity,
56752
+ options: { variant: "static" },
56753
+ includeKeyboard: true,
56754
+ keyboardOptions: {
56755
+ variant: "inline",
56756
+ inputVariant: "outlined",
56757
+ format: INPUT_FORMAT,
56758
+ InputProps: {
56759
+ inputComponent: ReactInputMask,
56760
+ inputProps: {
56761
+ mask: getInputMask(INPUT_FORMAT),
56762
+ onKeyDown: handleKeyDown2
56763
+ }
56764
+ },
56765
+ helperText: "",
56766
+ InputAdornmentProps: { position: "start" }
56767
+ }
56768
+ };
56769
+ return /* @__PURE__ */ jsxs("div", { className: "date-range__container", "data-testid": "date-range__container", children: [
56770
+ /* @__PURE__ */ jsx(DateRangePicker, { ...dateRangeProps }),
56771
+ /* @__PURE__ */ jsxs("div", { className: "date-range__buttons-panel", children: [
56772
+ /* @__PURE__ */ jsx(
56773
+ "button",
56774
+ {
56775
+ "data-testid": "date-range__button-cancel",
56776
+ className: "date-range__button-cancel",
56777
+ onClick: (e2) => handleCancel(e2),
56778
+ children: resources.DateRangePicker__Cancel
56779
+ }
56780
+ ),
56781
+ /* @__PURE__ */ jsx(
56782
+ "button",
56783
+ {
56784
+ ref: acceptButtonRef,
56785
+ "data-testid": "date-range__button-ok",
56786
+ className: classNames("date-range__button-ok"),
56787
+ onClick: (e2) => handleAccept(e2),
56788
+ children: resources.DateRangePicker__Accept
56789
+ }
56790
+ )
56791
+ ] })
56792
+ ] });
56793
+ }
56788
56794
  const DateRangeCalendarIcon = React__default.memo((props) => {
56789
56795
  const calendar2 = useRef(null);
56790
56796
  const [isExpanded, setExpanded] = useState(false);
@@ -56814,10 +56820,11 @@ var PeriodType = /* @__PURE__ */ ((PeriodType2) => {
56814
56820
  })(PeriodType || {});
56815
56821
  function WidgetPeriodSelector(props) {
56816
56822
  const { services, className, dataTestIdPostfix, options, onChange, onDatesChange, onAccept, selectedValue, datesValue, isLoading } = props;
56817
- const { resources, localStorage: localStorage2 } = services;
56823
+ const { resources, applicationSettings } = services;
56818
56824
  const defaultOption = { key: PeriodType.DateRange, value: resources.Period };
56819
56825
  const selectorDataTestId = className ? `${className}-selector` : "widget-period-selector";
56820
- const locale2 = localStorage2.getData("currentLocale_") === "en-US" ? "en" : "ru";
56826
+ const browserLocale = typeof navigator !== "undefined" ? navigator.language?.split("-")?.[0] : void 0;
56827
+ const locale2 = applicationSettings?.culture?.twoLetterISOLanguageName || applicationSettings?.culture?.name?.split("-")?.[0] || browserLocale;
56821
56828
  const selectedDisplayValue = options.find((option) => option.key.toString() === selectedValue)?.value ?? "";
56822
56829
  const handleSelectOption = (option) => {
56823
56830
  onChange(option.key.toString());
@@ -59285,10 +59292,10 @@ function DropdownWithEllipsis(props) {
59285
59292
  select: true,
59286
59293
  "data-testid": dataTestId,
59287
59294
  ...field,
59288
- value,
59295
+ value: value?.toString() ?? "",
59289
59296
  inputRef: field.ref,
59290
59297
  ref: anchorRef,
59291
- onChange: (event) => handleChange(event.target.value),
59298
+ onChange: (event) => handleChange(String(event.target.value)),
59292
59299
  className,
59293
59300
  variant: "outlined",
59294
59301
  size: "small",
@@ -59298,15 +59305,18 @@ function DropdownWithEllipsis(props) {
59298
59305
  label: shouldShowFloatingLabel ? label : void 0,
59299
59306
  InputLabelProps: shouldShowFloatingLabel ? { shrink: true } : void 0,
59300
59307
  children: [
59301
- options?.map((option) => /* @__PURE__ */ jsx(
59302
- DropdownOption2,
59303
- {
59304
- "data-testid": `${dataTestId}-option-${option.value}`,
59305
- value: option.value,
59306
- displayName: option.displayName
59307
- },
59308
- `${field.name}_${option.value}`
59309
- )),
59308
+ options?.map((option) => {
59309
+ const optionValue = option.value?.toString() ?? "";
59310
+ return /* @__PURE__ */ jsx(
59311
+ DropdownOption2,
59312
+ {
59313
+ "data-testid": `${dataTestId}-option-${optionValue}`,
59314
+ value: optionValue,
59315
+ displayName: option.displayName
59316
+ },
59317
+ `${field.name}_${optionValue}`
59318
+ );
59319
+ }),
59310
59320
  options.length === 0 && noOptionsText && /* @__PURE__ */ jsx(NoOptionMenuItem, { text: noOptionsText })
59311
59321
  ]
59312
59322
  }
@@ -61099,6 +61109,10 @@ function ListPanel(props) {
61099
61109
  const changeItem = async (index2, value2) => {
61100
61110
  setItems(items.map((item, i2) => i2 === index2 ? value2 : item));
61101
61111
  };
61112
+ const handleInputEnter = (e2) => {
61113
+ if (e2.key !== "Enter") return;
61114
+ addItem();
61115
+ };
61102
61116
  return /* @__PURE__ */ jsxs(List$4, { component: Paper$3, className, children: [
61103
61117
  items && items.map((item, index2) => /* @__PURE__ */ jsx(
61104
61118
  ListItem,
@@ -61119,6 +61133,7 @@ function ListPanel(props) {
61119
61133
  value,
61120
61134
  onChange: (e2) => setValue(e2.target.value),
61121
61135
  fullWidth: true,
61136
+ onKeyPress: handleInputEnter,
61122
61137
  slotProps: { htmlInput: { "data-testid": "add-item-input" } }
61123
61138
  }
61124
61139
  ),
@@ -62238,7 +62253,10 @@ function NumberComponent(props) {
62238
62253
  }
62239
62254
  function handleBlur(event) {
62240
62255
  if (valueRef.current) {
62241
- onChange(clampValue(valueRef.current));
62256
+ const clampedValue = clampValue(valueRef.current);
62257
+ if (clampedValue !== valueRef.current.toString()) {
62258
+ onChange(clampValue(valueRef.current));
62259
+ }
62242
62260
  }
62243
62261
  onBlur?.(event);
62244
62262
  }
@@ -63643,7 +63661,7 @@ class LoginLogic extends ComponentLogic {
63643
63661
  } else {
63644
63662
  const data = await response.json();
63645
63663
  if (data && data.message) {
63646
- this.setErrorAndUrlMessage(data.message);
63664
+ this.setError(data.message);
63647
63665
  }
63648
63666
  }
63649
63667
  }
@@ -63664,7 +63682,7 @@ class LoginLogic extends ComponentLogic {
63664
63682
  } else {
63665
63683
  const data = await response.json();
63666
63684
  if (data && data.message) {
63667
- this.setErrorAndUrlMessage(data.message);
63685
+ this.setError(data.message);
63668
63686
  }
63669
63687
  }
63670
63688
  } finally {
@@ -63689,16 +63707,14 @@ class LoginLogic extends ComponentLogic {
63689
63707
  fn: ({ userName, password }, event) => ({ userName, password, event }),
63690
63708
  target: this.login
63691
63709
  });
63692
- const queryParams = parseQueryString(location.search.substring(1));
63693
- const errorMessage = queryParams["message"]?.replaceAll("+", " ") || "";
63694
- this.setError(errorMessage);
63695
- }
63696
- setErrorAndUrlMessage(message) {
63697
- this.setError(message);
63698
63710
  const url = new URL(location.href);
63699
- const messageParamValue = message.replaceAll(" ", "+");
63700
- url.searchParams.set("message", messageParamValue);
63701
- history.pushState({}, "", url.toString());
63711
+ const hasMessageQueryParam = url.searchParams.has("message");
63712
+ const errorMessage = (url.searchParams.get("message") || "").replaceAll("+", " ");
63713
+ if (hasMessageQueryParam) {
63714
+ url.searchParams.delete("message");
63715
+ history.replaceState({}, "", url.toString());
63716
+ }
63717
+ this.setError(errorMessage);
63702
63718
  }
63703
63719
  }
63704
63720
  function LoginPage(props) {
@@ -71796,7 +71812,7 @@ class SettingsNavigationService {
71796
71812
  const breadcrumbsItems = [];
71797
71813
  if (data.serverId) {
71798
71814
  breadcrumbsItems.push({
71799
- label: `${this.application.resources.Server}: ${data.serverId}`,
71815
+ label: `${this.application.resources.Server}: ${data.serverId.toUpperCase()}`,
71800
71816
  path: this.getServerPageUrl(serverId)
71801
71817
  });
71802
71818
  }
@@ -109942,7 +109958,7 @@ function Dropdown(props) {
109942
109958
  const { required, id: fieldName, value, options, label } = props;
109943
109959
  const services = React__default.useContext(ServicesContext);
109944
109960
  const { resetField, control } = useCustomFormContext();
109945
- const defaultValue = value ?? "";
109961
+ const defaultValue = value !== void 0 && value !== null ? value.toString() : "";
109946
109962
  const {
109947
109963
  field,
109948
109964
  fieldState: { isDirty, error }