@formio/js 5.1.0-rc.3 → 5.1.0-rc.5

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 (56) hide show
  1. package/dist/formio.embed.js +1 -1
  2. package/dist/formio.embed.min.js +1 -1
  3. package/dist/formio.embed.min.js.LICENSE.txt +1 -1
  4. package/dist/formio.form.js +7 -7
  5. package/dist/formio.form.min.js +1 -1
  6. package/dist/formio.form.min.js.LICENSE.txt +1 -1
  7. package/dist/formio.full.js +7 -7
  8. package/dist/formio.full.min.js +1 -1
  9. package/dist/formio.full.min.js.LICENSE.txt +1 -1
  10. package/dist/formio.js +6 -6
  11. package/dist/formio.min.js +1 -1
  12. package/dist/formio.min.js.LICENSE.txt +1 -1
  13. package/dist/formio.utils.js +3 -3
  14. package/dist/formio.utils.min.js +1 -1
  15. package/dist/formio.utils.min.js.LICENSE.txt +1 -1
  16. package/lib/cjs/Webform.d.ts +1 -1
  17. package/lib/cjs/components/_classes/field/Field.d.ts +2 -2
  18. package/lib/cjs/components/_classes/field/Field.js +1 -1
  19. package/lib/cjs/components/_classes/nested/NestedComponent.d.ts +1 -1
  20. package/lib/cjs/components/address/Address.d.ts +1 -2
  21. package/lib/cjs/components/button/Button.d.ts +1 -1
  22. package/lib/cjs/components/checkbox/Checkbox.d.ts +1 -1
  23. package/lib/cjs/components/columns/Columns.d.ts +1 -1
  24. package/lib/cjs/components/datagrid/DataGrid.d.ts +1 -1
  25. package/lib/cjs/components/day/Day.d.ts +1 -1
  26. package/lib/cjs/components/file/File.d.ts +1 -1
  27. package/lib/cjs/components/radio/Radio.d.ts +1 -1
  28. package/lib/cjs/components/select/Select.d.ts +1 -1
  29. package/lib/cjs/components/survey/Survey.d.ts +1 -1
  30. package/lib/cjs/components/table/Table.d.ts +1 -1
  31. package/lib/cjs/components/tabs/Tabs.d.ts +1 -1
  32. package/lib/cjs/formio.embed.d.ts +1 -1
  33. package/lib/cjs/formio.embed.js +3 -0
  34. package/lib/cjs/providers/address/GoogleAddressProvider.d.ts +5 -0
  35. package/lib/cjs/providers/address/GoogleAddressProvider.js +23 -1
  36. package/lib/mjs/Webform.d.ts +1 -1
  37. package/lib/mjs/components/_classes/field/Field.d.ts +2 -2
  38. package/lib/mjs/components/_classes/field/Field.js +1 -1
  39. package/lib/mjs/components/_classes/nested/NestedComponent.d.ts +1 -1
  40. package/lib/mjs/components/address/Address.d.ts +1 -2
  41. package/lib/mjs/components/button/Button.d.ts +1 -1
  42. package/lib/mjs/components/checkbox/Checkbox.d.ts +1 -1
  43. package/lib/mjs/components/columns/Columns.d.ts +1 -1
  44. package/lib/mjs/components/datagrid/DataGrid.d.ts +1 -1
  45. package/lib/mjs/components/day/Day.d.ts +1 -1
  46. package/lib/mjs/components/file/File.d.ts +1 -1
  47. package/lib/mjs/components/radio/Radio.d.ts +1 -1
  48. package/lib/mjs/components/select/Select.d.ts +1 -1
  49. package/lib/mjs/components/survey/Survey.d.ts +1 -1
  50. package/lib/mjs/components/table/Table.d.ts +1 -1
  51. package/lib/mjs/components/tabs/Tabs.d.ts +1 -1
  52. package/lib/mjs/formio.embed.d.ts +1 -1
  53. package/lib/mjs/formio.embed.js +1 -0
  54. package/lib/mjs/providers/address/GoogleAddressProvider.d.ts +5 -0
  55. package/lib/mjs/providers/address/GoogleAddressProvider.js +22 -1
  56. package/package.json +2 -2
@@ -20,7 +20,7 @@
20
20
 
21
21
  /*! @license DOMPurify 3.2.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.3/LICENSE */
22
22
 
23
- /*! formiojs v5.1.0-rc.3 | https://unpkg.com/formiojs@5.1.0-rc.3/LICENSE.txt */
23
+ /*! formiojs v5.1.0-rc.5 | https://unpkg.com/formiojs@5.1.0-rc.5/LICENSE.txt */
24
24
 
25
25
  /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
26
26
 
@@ -363,7 +363,7 @@ declare class Webform extends NestedDataComponent {
363
363
  executeFormController(): false | undefined;
364
364
  build(element: any): Promise<any>;
365
365
  getClassName(): string;
366
- render(): import("./components/_classes/field/Field").default;
366
+ render(): string;
367
367
  redraw(): Promise<void> | Promise<boolean>;
368
368
  attach(element: any): Promise<boolean>;
369
369
  hasRequiredFields(): boolean;
@@ -1,9 +1,9 @@
1
1
  export default class Field extends Component {
2
2
  /**
3
3
  * @param {object} element - The component to create.
4
- * @returns {Field} - The created field.
4
+ * @returns {string} - The rendered HTML string of a component
5
5
  */
6
- render(element: object): Field;
6
+ render(element: object): string;
7
7
  /**
8
8
  /* Saves current caret position to restore it after the component is redrawn
9
9
  * @param {HTMLElement} element - The element to save the caret position for.
@@ -11,7 +11,7 @@ const Component_1 = __importDefault(require("../component/Component"));
11
11
  class Field extends Component_1.default {
12
12
  /**
13
13
  * @param {object} element - The component to create.
14
- * @returns {Field} - The created field.
14
+ * @returns {string} - The rendered HTML string of a component
15
15
  */
16
16
  render(element) {
17
17
  if (this.noField) {
@@ -146,7 +146,7 @@ export default class NestedComponent extends Field {
146
146
  */
147
147
  addComponent(component: import('@formio/core').Component, data?: object, before?: HTMLElement, noAdd?: boolean | undefined): any;
148
148
  beforeFocus(): void;
149
- render(children: any): Field;
149
+ render(children: any): string;
150
150
  renderComponents(components: any): any;
151
151
  attach(element: any): Promise<[void, void]>;
152
152
  /**
@@ -60,7 +60,7 @@ export default class AddressComponent extends ContainerComponent {
60
60
  renderElement(value: any): any;
61
61
  renderRow(value: any, index: any): any;
62
62
  renderGrid(): any;
63
- render(): Field;
63
+ render(): string;
64
64
  onSelectAddress(address: any, element: any, index: any): void;
65
65
  addRow(): void;
66
66
  attach(element: any): Promise<void>;
@@ -71,4 +71,3 @@ export default class AddressComponent extends ContainerComponent {
71
71
  getValueAsString(value: any, options: any): any;
72
72
  }
73
73
  import ContainerComponent from '../container/Container';
74
- import Field from '../_classes/field/Field';
@@ -21,7 +21,7 @@ export default class ButtonComponent extends Field {
21
21
  get clicked(): any;
22
22
  get defaultValue(): boolean;
23
23
  get oauthConfig(): any;
24
- render(): Field;
24
+ render(): string;
25
25
  attachButton(): void;
26
26
  hasError: boolean | undefined;
27
27
  isDisabledOnInvalid: any;
@@ -39,7 +39,7 @@ export default class CheckBoxComponent extends Field {
39
39
  get labelInfo(): {
40
40
  hidden: boolean;
41
41
  };
42
- render(): Field;
42
+ render(): string;
43
43
  attach(element: any): Promise<void>;
44
44
  input: any;
45
45
  detach(element: any): void;
@@ -14,7 +14,7 @@ export default class ColumnsComponent extends NestedComponent {
14
14
  get columnKey(): string;
15
15
  columns: any[] | undefined;
16
16
  labelIsHidden(): boolean;
17
- render(): import("../_classes/field/Field").default;
17
+ render(): string;
18
18
  justifyColumn(items: any, index: any): boolean;
19
19
  justify(): any;
20
20
  get gridSize(): number;
@@ -54,7 +54,7 @@ export default class DataGridComponent extends NestedArrayComponent {
54
54
  hasTopSubmit(): any;
55
55
  hasBottomSubmit(): any;
56
56
  get canAddColumn(): boolean;
57
- render(): import("../_classes/field/Field").default;
57
+ render(): string;
58
58
  getRows(): {}[];
59
59
  getColumns(): any[];
60
60
  hasHeader(): any;
@@ -85,7 +85,7 @@ export default class DayComponent extends Field {
85
85
  }[] | undefined;
86
86
  setErrorClasses(elements: any, dirty: any, hasError: any): void;
87
87
  dayFirst: any;
88
- render(): Field;
88
+ render(): string;
89
89
  renderField(name: any): any;
90
90
  attach(element: any): Promise<void>;
91
91
  set disabled(disabled: any);
@@ -45,7 +45,7 @@ export default class FileComponent extends Field {
45
45
  type: number;
46
46
  actions: number;
47
47
  };
48
- render(): Field;
48
+ render(): string;
49
49
  getVideoStream(constraints: any): any;
50
50
  stopVideoStream(videoStream: any): void;
51
51
  getFrame(videoPlayer: any): Promise<any>;
@@ -28,7 +28,7 @@ export default class RadioComponent extends ListComponent {
28
28
  optionsLoaded: boolean | undefined;
29
29
  loadedOptions: any[] | undefined;
30
30
  beforeSubmit(): Promise<any>;
31
- render(): import("../_classes/field/Field").default;
31
+ render(): string;
32
32
  attach(element: any): Promise<void>;
33
33
  detach(element: any): void;
34
34
  validateValueProperty(): boolean;
@@ -112,7 +112,7 @@ export default class SelectComponent extends ListComponent {
112
112
  activate(): void;
113
113
  setLoadingItem(addToCurrentList?: boolean): void;
114
114
  get active(): boolean | undefined;
115
- render(): import("../_classes/field/Field").default;
115
+ render(): string;
116
116
  wrapElement(element: any): any;
117
117
  choicesOptions(): any;
118
118
  attach(element: any): Promise<void> | undefined;
@@ -14,7 +14,7 @@ export default class SurveyComponent extends Field {
14
14
  operators: string[];
15
15
  };
16
16
  static savedValueTypes(schema: any): string[];
17
- render(): Field;
17
+ render(): string;
18
18
  attach(element: any): Promise<void>;
19
19
  setValue(value: any, flags?: {}): boolean;
20
20
  get emptyValue(): {};
@@ -19,6 +19,6 @@ export default class TableComponent extends NestedComponent {
19
19
  get colWidth(): string;
20
20
  noField: boolean;
21
21
  table: any[] | undefined;
22
- render(): import("../_classes/field/Field").default;
22
+ render(): string;
23
23
  }
24
24
  import NestedComponent from '../_classes/nested/NestedComponent';
@@ -16,7 +16,7 @@ export default class TabsComponent extends NestedComponent {
16
16
  currentTab: number;
17
17
  noField: boolean;
18
18
  tabs: any[] | undefined;
19
- render(): import("../_classes/field/Field").default;
19
+ render(): string;
20
20
  detach(all: any): void;
21
21
  /**
22
22
  * Set the current tab.
@@ -1 +1 @@
1
- export {};
1
+ export { Formio } from "./InlineEmbed";
@@ -1,4 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Formio = void 0;
3
4
  const InlineEmbed_1 = require("./InlineEmbed");
4
5
  (0, InlineEmbed_1.embed)();
6
+ var InlineEmbed_2 = require("./InlineEmbed");
7
+ Object.defineProperty(exports, "Formio", { enumerable: true, get: function () { return InlineEmbed_2.Formio; } });
@@ -82,6 +82,11 @@ export class GoogleAddressProvider extends AddressProvider {
82
82
  search(): Promise<void>;
83
83
  makeRequest(): Promise<void>;
84
84
  getDisplayValue(address: any): any;
85
+ /**
86
+ * Tries to remove the library if api key for loaded script is different.
87
+ * @param {ProviderOptions} options - The options for the provider.
88
+ */
89
+ tryRemoveLibrary(options?: ProviderOptions): void;
85
90
  }
86
91
  export type AutocompleteOptions = {
87
92
  /**
@@ -8,6 +8,9 @@ exports.GoogleAddressProvider = void 0;
8
8
  const Formio_1 = require("../../Formio");
9
9
  const lodash_1 = __importDefault(require("lodash"));
10
10
  const AddressProvider_1 = require("./AddressProvider");
11
+ const GOOGLE_MAPS_BASE_URL = 'https://maps.googleapis.com';
12
+ const GOOGLE_MAPS_JS_URL = `${GOOGLE_MAPS_BASE_URL}/maps/api/js`;
13
+ const GOOGLE_MAPS_JS_WITH_PARAMS_URL = `${GOOGLE_MAPS_JS_URL}?v=quarterly&libraries=places&loading=async&callback=googleMapsCallback`;
11
14
  /**
12
15
  * @typedef {object} AutocompleteOptions
13
16
  * @property {string[]} fields - The fields to include in the autocomplete response.
@@ -55,10 +58,11 @@ class GoogleAddressProvider extends AddressProvider_1.AddressProvider {
55
58
  var _a;
56
59
  super(options);
57
60
  this.setAutocompleteOptions();
58
- let src = 'https://maps.googleapis.com/maps/api/js?v=quarterly&libraries=places&loading=async&callback=googleMapsCallback';
61
+ let src = GOOGLE_MAPS_JS_WITH_PARAMS_URL;
59
62
  if ((_a = options.params) === null || _a === void 0 ? void 0 : _a.key) {
60
63
  src += `&key=${options.params.key}`;
61
64
  }
65
+ this.tryRemoveLibrary(options);
62
66
  Formio_1.Formio.requireLibrary(this.getLibraryName(), 'google.maps.places', src);
63
67
  }
64
68
  /**
@@ -185,5 +189,23 @@ class GoogleAddressProvider extends AddressProvider_1.AddressProvider {
185
189
  : this.alternativeDisplayValueProperty;
186
190
  return lodash_1.default.get(address, displayedProperty, '');
187
191
  }
192
+ /**
193
+ * Tries to remove the library if api key for loaded script is different.
194
+ * @param {ProviderOptions} options - The options for the provider.
195
+ */
196
+ tryRemoveLibrary(options = {}) {
197
+ var _a, _b, _c;
198
+ if (!Formio_1.Formio.libraries[this.getLibraryName()]) {
199
+ return;
200
+ }
201
+ const existingScript = document.querySelector(`script[src^="${GOOGLE_MAPS_JS_URL}"]`);
202
+ if (existingScript && ((_a = options.params) === null || _a === void 0 ? void 0 : _a.key) && !existingScript.attributes.src.value.endsWith(options.params.key)) {
203
+ const googleMapsScripts = (_b = document.querySelectorAll(`script[src^="${GOOGLE_MAPS_BASE_URL}"]`)) !== null && _b !== void 0 ? _b : [];
204
+ googleMapsScripts.forEach(script => script.parentNode.removeChild(script));
205
+ delete Formio_1.Formio.libraries[this.getLibraryName()];
206
+ (_c = global === null || global === void 0 ? void 0 : global.google) === null || _c === void 0 ? true : delete _c.maps;
207
+ delete global[`${this.getLibraryName()}Callback`];
208
+ }
209
+ }
188
210
  }
189
211
  exports.GoogleAddressProvider = GoogleAddressProvider;
@@ -363,7 +363,7 @@ declare class Webform extends NestedDataComponent {
363
363
  executeFormController(): false | undefined;
364
364
  build(element: any): Promise<any>;
365
365
  getClassName(): string;
366
- render(): import("./components/_classes/field/Field").default;
366
+ render(): string;
367
367
  redraw(): Promise<void> | Promise<boolean>;
368
368
  attach(element: any): Promise<boolean>;
369
369
  hasRequiredFields(): boolean;
@@ -1,9 +1,9 @@
1
1
  export default class Field extends Component {
2
2
  /**
3
3
  * @param {object} element - The component to create.
4
- * @returns {Field} - The created field.
4
+ * @returns {string} - The rendered HTML string of a component
5
5
  */
6
- render(element: object): Field;
6
+ render(element: object): string;
7
7
  /**
8
8
  /* Saves current caret position to restore it after the component is redrawn
9
9
  * @param {HTMLElement} element - The element to save the caret position for.
@@ -6,7 +6,7 @@ import Component from '../component/Component';
6
6
  export default class Field extends Component {
7
7
  /**
8
8
  * @param {object} element - The component to create.
9
- * @returns {Field} - The created field.
9
+ * @returns {string} - The rendered HTML string of a component
10
10
  */
11
11
  render(element) {
12
12
  if (this.noField) {
@@ -146,7 +146,7 @@ export default class NestedComponent extends Field {
146
146
  */
147
147
  addComponent(component: import('@formio/core').Component, data?: object, before?: HTMLElement, noAdd?: boolean | undefined): any;
148
148
  beforeFocus(): void;
149
- render(children: any): Field;
149
+ render(children: any): string;
150
150
  renderComponents(components: any): any;
151
151
  attach(element: any): Promise<[void, void]>;
152
152
  /**
@@ -60,7 +60,7 @@ export default class AddressComponent extends ContainerComponent {
60
60
  renderElement(value: any): any;
61
61
  renderRow(value: any, index: any): any;
62
62
  renderGrid(): any;
63
- render(): Field;
63
+ render(): string;
64
64
  onSelectAddress(address: any, element: any, index: any): void;
65
65
  addRow(): void;
66
66
  attach(element: any): Promise<void>;
@@ -71,4 +71,3 @@ export default class AddressComponent extends ContainerComponent {
71
71
  getValueAsString(value: any, options: any): any;
72
72
  }
73
73
  import ContainerComponent from '../container/Container';
74
- import Field from '../_classes/field/Field';
@@ -21,7 +21,7 @@ export default class ButtonComponent extends Field {
21
21
  get clicked(): any;
22
22
  get defaultValue(): boolean;
23
23
  get oauthConfig(): any;
24
- render(): Field;
24
+ render(): string;
25
25
  attachButton(): void;
26
26
  hasError: boolean | undefined;
27
27
  isDisabledOnInvalid: any;
@@ -39,7 +39,7 @@ export default class CheckBoxComponent extends Field {
39
39
  get labelInfo(): {
40
40
  hidden: boolean;
41
41
  };
42
- render(): Field;
42
+ render(): string;
43
43
  attach(element: any): Promise<void>;
44
44
  input: any;
45
45
  detach(element: any): void;
@@ -14,7 +14,7 @@ export default class ColumnsComponent extends NestedComponent {
14
14
  get columnKey(): string;
15
15
  columns: any[] | undefined;
16
16
  labelIsHidden(): boolean;
17
- render(): import("../_classes/field/Field").default;
17
+ render(): string;
18
18
  justifyColumn(items: any, index: any): boolean;
19
19
  justify(): any;
20
20
  get gridSize(): number;
@@ -54,7 +54,7 @@ export default class DataGridComponent extends NestedArrayComponent {
54
54
  hasTopSubmit(): any;
55
55
  hasBottomSubmit(): any;
56
56
  get canAddColumn(): boolean;
57
- render(): import("../_classes/field/Field").default;
57
+ render(): string;
58
58
  getRows(): {}[];
59
59
  getColumns(): any[];
60
60
  hasHeader(): any;
@@ -85,7 +85,7 @@ export default class DayComponent extends Field {
85
85
  }[] | undefined;
86
86
  setErrorClasses(elements: any, dirty: any, hasError: any): void;
87
87
  dayFirst: any;
88
- render(): Field;
88
+ render(): string;
89
89
  renderField(name: any): any;
90
90
  attach(element: any): Promise<void>;
91
91
  set disabled(disabled: any);
@@ -45,7 +45,7 @@ export default class FileComponent extends Field {
45
45
  type: number;
46
46
  actions: number;
47
47
  };
48
- render(): Field;
48
+ render(): string;
49
49
  getVideoStream(constraints: any): any;
50
50
  stopVideoStream(videoStream: any): void;
51
51
  getFrame(videoPlayer: any): Promise<any>;
@@ -28,7 +28,7 @@ export default class RadioComponent extends ListComponent {
28
28
  optionsLoaded: boolean | undefined;
29
29
  loadedOptions: any[] | undefined;
30
30
  beforeSubmit(): Promise<any>;
31
- render(): import("../_classes/field/Field").default;
31
+ render(): string;
32
32
  attach(element: any): Promise<void>;
33
33
  detach(element: any): void;
34
34
  validateValueProperty(): boolean;
@@ -112,7 +112,7 @@ export default class SelectComponent extends ListComponent {
112
112
  activate(): void;
113
113
  setLoadingItem(addToCurrentList?: boolean): void;
114
114
  get active(): boolean | undefined;
115
- render(): import("../_classes/field/Field").default;
115
+ render(): string;
116
116
  wrapElement(element: any): any;
117
117
  choicesOptions(): any;
118
118
  attach(element: any): Promise<void> | undefined;
@@ -14,7 +14,7 @@ export default class SurveyComponent extends Field {
14
14
  operators: string[];
15
15
  };
16
16
  static savedValueTypes(schema: any): string[];
17
- render(): Field;
17
+ render(): string;
18
18
  attach(element: any): Promise<void>;
19
19
  setValue(value: any, flags?: {}): boolean;
20
20
  get emptyValue(): {};
@@ -19,6 +19,6 @@ export default class TableComponent extends NestedComponent {
19
19
  get colWidth(): string;
20
20
  noField: boolean;
21
21
  table: any[] | undefined;
22
- render(): import("../_classes/field/Field").default;
22
+ render(): string;
23
23
  }
24
24
  import NestedComponent from '../_classes/nested/NestedComponent';
@@ -16,7 +16,7 @@ export default class TabsComponent extends NestedComponent {
16
16
  currentTab: number;
17
17
  noField: boolean;
18
18
  tabs: any[] | undefined;
19
- render(): import("../_classes/field/Field").default;
19
+ render(): string;
20
20
  detach(all: any): void;
21
21
  /**
22
22
  * Set the current tab.
@@ -1 +1 @@
1
- export {};
1
+ export { Formio } from "./InlineEmbed";
@@ -1,2 +1,3 @@
1
1
  import { embed } from './InlineEmbed';
2
2
  embed();
3
+ export { Formio } from './InlineEmbed';
@@ -82,6 +82,11 @@ export class GoogleAddressProvider extends AddressProvider {
82
82
  search(): Promise<void>;
83
83
  makeRequest(): Promise<void>;
84
84
  getDisplayValue(address: any): any;
85
+ /**
86
+ * Tries to remove the library if api key for loaded script is different.
87
+ * @param {ProviderOptions} options - The options for the provider.
88
+ */
89
+ tryRemoveLibrary(options?: ProviderOptions): void;
85
90
  }
86
91
  export type AutocompleteOptions = {
87
92
  /**
@@ -2,6 +2,9 @@
2
2
  import { Formio } from '../../Formio';
3
3
  import _ from 'lodash';
4
4
  import { AddressProvider } from './AddressProvider';
5
+ const GOOGLE_MAPS_BASE_URL = 'https://maps.googleapis.com';
6
+ const GOOGLE_MAPS_JS_URL = `${GOOGLE_MAPS_BASE_URL}/maps/api/js`;
7
+ const GOOGLE_MAPS_JS_WITH_PARAMS_URL = `${GOOGLE_MAPS_JS_URL}?v=quarterly&libraries=places&loading=async&callback=googleMapsCallback`;
5
8
  /**
6
9
  * @typedef {object} AutocompleteOptions
7
10
  * @property {string[]} fields - The fields to include in the autocomplete response.
@@ -48,10 +51,11 @@ export class GoogleAddressProvider extends AddressProvider {
48
51
  constructor(options = {}) {
49
52
  super(options);
50
53
  this.setAutocompleteOptions();
51
- let src = 'https://maps.googleapis.com/maps/api/js?v=quarterly&libraries=places&loading=async&callback=googleMapsCallback';
54
+ let src = GOOGLE_MAPS_JS_WITH_PARAMS_URL;
52
55
  if (options.params?.key) {
53
56
  src += `&key=${options.params.key}`;
54
57
  }
58
+ this.tryRemoveLibrary(options);
55
59
  Formio.requireLibrary(this.getLibraryName(), 'google.maps.places', src);
56
60
  }
57
61
  /**
@@ -178,4 +182,21 @@ export class GoogleAddressProvider extends AddressProvider {
178
182
  : this.alternativeDisplayValueProperty;
179
183
  return _.get(address, displayedProperty, '');
180
184
  }
185
+ /**
186
+ * Tries to remove the library if api key for loaded script is different.
187
+ * @param {ProviderOptions} options - The options for the provider.
188
+ */
189
+ tryRemoveLibrary(options = {}) {
190
+ if (!Formio.libraries[this.getLibraryName()]) {
191
+ return;
192
+ }
193
+ const existingScript = document.querySelector(`script[src^="${GOOGLE_MAPS_JS_URL}"]`);
194
+ if (existingScript && options.params?.key && !existingScript.attributes.src.value.endsWith(options.params.key)) {
195
+ const googleMapsScripts = document.querySelectorAll(`script[src^="${GOOGLE_MAPS_BASE_URL}"]`) ?? [];
196
+ googleMapsScripts.forEach(script => script.parentNode.removeChild(script));
197
+ delete Formio.libraries[this.getLibraryName()];
198
+ delete global?.google?.maps;
199
+ delete global[`${this.getLibraryName()}Callback`];
200
+ }
201
+ }
181
202
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@formio/js",
3
- "version": "5.1.0-rc.3",
3
+ "version": "5.1.0-rc.5",
4
4
  "description": "JavaScript powered Forms with JSON Form Builder",
5
5
  "main": "lib/cjs/index.js",
6
6
  "exports": {
@@ -81,7 +81,7 @@
81
81
  "dependencies": {
82
82
  "@formio/bootstrap": "3.1.0-rc.1",
83
83
  "@formio/choices.js": "^10.2.1",
84
- "@formio/core": "2.4.0-rc.3",
84
+ "@formio/core": "2.4.0-rc.4",
85
85
  "@formio/text-mask-addons": "^3.8.0-formio.4",
86
86
  "@formio/vanilla-text-mask": "^5.1.1-formio.1",
87
87
  "abortcontroller-polyfill": "^1.7.5",