@kaspernj/api-maker 1.0.451 → 1.0.453
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/build/api.js +1 -1
- package/build/api.js.map +1 -0
- package/build/attribute-not-loaded-error.js +1 -1
- package/build/attribute-not-loaded-error.js.map +1 -0
- package/build/base-component.js +1 -1
- package/build/base-component.js.map +1 -0
- package/build/base-error.js +1 -1
- package/build/base-error.js.map +1 -0
- package/build/base-model/attribute.js +1 -1
- package/build/base-model/attribute.js.map +1 -0
- package/build/base-model/column.js +1 -1
- package/build/base-model/column.js.map +1 -0
- package/build/base-model/reflection.js +1 -1
- package/build/base-model/reflection.js.map +1 -0
- package/build/base-model/scope.js +1 -1
- package/build/base-model/scope.js.map +1 -0
- package/build/base-model.js +1 -1
- package/build/base-model.js.map +1 -0
- package/build/bootstrap/attribute-row/index.js +1 -1
- package/build/bootstrap/attribute-row/index.js.map +1 -0
- package/build/bootstrap/attribute-rows.js +1 -1
- package/build/bootstrap/attribute-rows.js.map +1 -0
- package/build/bootstrap/card.js +1 -1
- package/build/bootstrap/card.js.map +1 -0
- package/build/bootstrap/checkbox.js +1 -1
- package/build/bootstrap/checkbox.js.map +1 -0
- package/build/bootstrap/checkboxes.js +1 -1
- package/build/bootstrap/checkboxes.js.map +1 -0
- package/build/bootstrap/index.js +1 -1
- package/build/bootstrap/index.js.map +1 -0
- package/build/bootstrap/input.js +1 -1
- package/build/bootstrap/input.js.map +1 -0
- package/build/bootstrap/invalid-feedback.js +1 -1
- package/build/bootstrap/invalid-feedback.js.map +1 -0
- package/build/bootstrap/paginate.js +1 -1
- package/build/bootstrap/paginate.js.map +1 -0
- package/build/bootstrap/radio-buttons.js +1 -1
- package/build/bootstrap/radio-buttons.js.map +1 -0
- package/build/bootstrap/select.js +1 -1
- package/build/bootstrap/select.js.map +1 -0
- package/build/bootstrap/sort-link.js +1 -1
- package/build/bootstrap/sort-link.js.map +1 -0
- package/build/cable-connection-pool.js +1 -1
- package/build/cable-connection-pool.js.map +1 -0
- package/build/cable-subscription-pool.js +1 -1
- package/build/cable-subscription-pool.js.map +1 -0
- package/build/cable-subscription.js +1 -1
- package/build/cable-subscription.js.map +1 -0
- package/build/cache-key-generator.js +1 -1
- package/build/cache-key-generator.js.map +1 -0
- package/build/can-can.js +1 -1
- package/build/can-can.js.map +1 -0
- package/build/channels-consumer.js +1 -1
- package/build/channels-consumer.js.map +1 -0
- package/build/collection-loader.js +1 -1
- package/build/collection-loader.js.map +1 -0
- package/build/collection.js +1 -1
- package/build/collection.js.map +1 -0
- package/build/command-submit-data.js +1 -1
- package/build/command-submit-data.js.map +1 -0
- package/build/commands-pool.js +1 -1
- package/build/commands-pool.js.map +1 -0
- package/build/compose.js +1 -1
- package/build/compose.js.map +1 -0
- package/build/config.js +1 -1
- package/build/config.js.map +1 -0
- package/build/custom-error.js +1 -1
- package/build/custom-error.js.map +1 -0
- package/build/data-set-to-attributes.js +1 -1
- package/build/data-set-to-attributes.js.map +1 -0
- package/build/deserializer.js +1 -1
- package/build/deserializer.js.map +1 -0
- package/build/destroy-error.js +1 -1
- package/build/destroy-error.js.map +1 -0
- package/build/devise.js +1 -1
- package/build/devise.js.map +1 -0
- package/build/draggable-sort/controller.js +1 -1
- package/build/draggable-sort/controller.js.map +1 -0
- package/build/draggable-sort/index.js +1 -1
- package/build/draggable-sort/index.js.map +1 -0
- package/build/draggable-sort/item.js +1 -1
- package/build/draggable-sort/item.js.map +1 -0
- package/build/error-logger.js +1 -1
- package/build/error-logger.js.map +1 -0
- package/build/error-messages.js +1 -1
- package/build/error-messages.js.map +1 -0
- package/build/event-connection.js +1 -1
- package/build/event-connection.js.map +1 -0
- package/build/event-model-class.js +1 -1
- package/build/event-model-class.js.map +1 -0
- package/build/events.js +1 -1
- package/build/events.js.map +1 -0
- package/build/flash-message.js +1 -1
- package/build/flash-message.js.map +1 -0
- package/build/form.js +1 -1
- package/build/form.js.map +1 -0
- package/build/index.js +1 -1
- package/build/index.js.map +1 -0
- package/build/inputs/attachment.js +1 -1
- package/build/inputs/attachment.js.map +1 -0
- package/build/inputs/auto-submit.js +1 -1
- package/build/inputs/auto-submit.js.map +1 -0
- package/build/inputs/checkbox.js +1 -1
- package/build/inputs/checkbox.js.map +1 -0
- package/build/inputs/checkboxes.js +1 -1
- package/build/inputs/checkboxes.js.map +1 -0
- package/build/inputs/id-for-component.js +1 -1
- package/build/inputs/id-for-component.js.map +1 -0
- package/build/inputs/input-wrapper.js +1 -1
- package/build/inputs/input-wrapper.js.map +1 -0
- package/build/inputs/input.js +1 -1
- package/build/inputs/input.js.map +1 -0
- package/build/inputs/money.js +1 -1
- package/build/inputs/money.js.map +1 -0
- package/build/inputs/name-for-component.js +1 -1
- package/build/inputs/name-for-component.js.map +1 -0
- package/build/inputs/select.js +1 -1
- package/build/inputs/select.js.map +1 -0
- package/build/instance-of-class-name.js +1 -1
- package/build/instance-of-class-name.js.map +1 -0
- package/build/key-value-store.js +1 -1
- package/build/key-value-store.js.map +1 -0
- package/build/link.js +1 -1
- package/build/link.js.map +1 -0
- package/build/logger.js +1 -1
- package/build/logger.js.map +1 -0
- package/build/modal.js +1 -1
- package/build/modal.js.map +1 -0
- package/build/model-class-require.js +1 -1
- package/build/model-class-require.js.map +1 -0
- package/build/model-events.js +1 -1
- package/build/model-events.js.map +1 -0
- package/build/model-name.js +1 -1
- package/build/model-name.js.map +1 -0
- package/build/model-prop-type.js +1 -1
- package/build/model-prop-type.js.map +1 -0
- package/build/model-recipes-loader.js +1 -1
- package/build/model-recipes-loader.js.map +1 -0
- package/build/model-recipes-model-loader.js +1 -1
- package/build/model-recipes-model-loader.js.map +1 -0
- package/build/models-response-reader.js +1 -1
- package/build/models-response-reader.js.map +1 -0
- package/build/models.js +1 -1
- package/build/models.js.map +1 -0
- package/build/money-formatter.js +1 -1
- package/build/money-formatter.js.map +1 -0
- package/build/not-loaded-error.js +1 -1
- package/build/not-loaded-error.js.map +1 -0
- package/build/params.js +1 -1
- package/build/params.js.map +1 -0
- package/build/preloaded.js +1 -1
- package/build/preloaded.js.map +1 -0
- package/build/resize-observer.js +1 -1
- package/build/resize-observer.js.map +1 -0
- package/build/result.js +1 -1
- package/build/result.js.map +1 -0
- package/build/router/route.js +1 -1
- package/build/router/route.js.map +1 -0
- package/build/router/switch.js +1 -1
- package/build/router/switch.js.map +1 -0
- package/build/router.js +1 -1
- package/build/router.js.map +1 -0
- package/build/routes-native.js +1 -1
- package/build/routes-native.js.map +1 -0
- package/build/routes.js +1 -1
- package/build/routes.js.map +1 -0
- package/build/run-last.js +1 -1
- package/build/run-last.js.map +1 -0
- package/build/serializer.js +1 -1
- package/build/serializer.js.map +1 -0
- package/build/services.js +1 -1
- package/build/services.js.map +1 -0
- package/build/session-status-updater.js +1 -1
- package/build/session-status-updater.js.map +1 -0
- package/build/source-maps-loader.js +19 -8
- package/build/source-maps-loader.js.map +1 -0
- package/build/super-admin/config-reader.js +1 -1
- package/build/super-admin/config-reader.js.map +1 -0
- package/build/super-admin/edit-page/edit-attribute-checkbox.js +1 -1
- package/build/super-admin/edit-page/edit-attribute-checkbox.js.map +1 -0
- package/build/super-admin/edit-page/edit-attribute-content.js +1 -1
- package/build/super-admin/edit-page/edit-attribute-content.js.map +1 -0
- package/build/super-admin/edit-page/edit-attribute-input.js +1 -1
- package/build/super-admin/edit-page/edit-attribute-input.js.map +1 -0
- package/build/super-admin/edit-page/edit-attribute.js +1 -1
- package/build/super-admin/edit-page/edit-attribute.js.map +1 -0
- package/build/super-admin/edit-page.js +1 -1
- package/build/super-admin/edit-page.js.map +1 -0
- package/build/super-admin/has-edit-config.js +1 -1
- package/build/super-admin/has-edit-config.js.map +1 -0
- package/build/super-admin/index-page.js +1 -1
- package/build/super-admin/index-page.js.map +1 -0
- package/build/super-admin/index.js +1 -1
- package/build/super-admin/index.js.map +1 -0
- package/build/super-admin/layout/header/index.js +1 -1
- package/build/super-admin/layout/header/index.js.map +1 -0
- package/build/super-admin/layout/index.js +1 -1
- package/build/super-admin/layout/index.js.map +1 -0
- package/build/super-admin/layout/menu/index.js +1 -1
- package/build/super-admin/layout/menu/index.js.map +1 -0
- package/build/super-admin/layout/menu/menu-content.js +1 -1
- package/build/super-admin/layout/menu/menu-content.js.map +1 -0
- package/build/super-admin/layout/menu/menu-item.js +1 -1
- package/build/super-admin/layout/menu/menu-item.js.map +1 -0
- package/build/super-admin/layout/no-access.js +1 -1
- package/build/super-admin/layout/no-access.js.map +1 -0
- package/build/super-admin/model-class-table.js +1 -1
- package/build/super-admin/model-class-table.js.map +1 -0
- package/build/super-admin/models.js +1 -1
- package/build/super-admin/models.js.map +1 -0
- package/build/super-admin/show-nav.js +1 -1
- package/build/super-admin/show-nav.js.map +1 -0
- package/build/super-admin/show-page/belongs-to-attribute-row.js +1 -1
- package/build/super-admin/show-page/belongs-to-attribute-row.js.map +1 -0
- package/build/super-admin/show-page/index.js +1 -1
- package/build/super-admin/show-page/index.js.map +1 -0
- package/build/super-admin/show-reflection-actions.js +1 -1
- package/build/super-admin/show-reflection-actions.js.map +1 -0
- package/build/super-admin/show-reflection-link.js +1 -1
- package/build/super-admin/show-reflection-link.js.map +1 -0
- package/build/super-admin/show-reflection-page.js +1 -1
- package/build/super-admin/show-reflection-page.js.map +1 -0
- package/build/table/column-content.js +1 -1
- package/build/table/column-content.js.map +1 -0
- package/build/table/column-identifier.js +1 -1
- package/build/table/column-identifier.js.map +1 -0
- package/build/table/column-visible.js +1 -1
- package/build/table/column-visible.js.map +1 -0
- package/build/table/components/column.js +1 -1
- package/build/table/components/column.js.map +1 -0
- package/build/table/components/flat-list.js +1 -1
- package/build/table/components/flat-list.js.map +1 -0
- package/build/table/components/header.js +1 -1
- package/build/table/components/header.js.map +1 -0
- package/build/table/components/row.js +1 -1
- package/build/table/components/row.js.map +1 -0
- package/build/table/filters/attribute-element.js +1 -1
- package/build/table/filters/attribute-element.js.map +1 -0
- package/build/table/filters/filter-form.js +1 -1
- package/build/table/filters/filter-form.js.map +1 -0
- package/build/table/filters/filter.js +1 -1
- package/build/table/filters/filter.js.map +1 -0
- package/build/table/filters/index.js +1 -1
- package/build/table/filters/index.js.map +1 -0
- package/build/table/filters/load-search-modal.js +1 -1
- package/build/table/filters/load-search-modal.js.map +1 -0
- package/build/table/filters/reflection-element.js +1 -1
- package/build/table/filters/reflection-element.js.map +1 -0
- package/build/table/filters/save-search-modal.js +1 -1
- package/build/table/filters/save-search-modal.js.map +1 -0
- package/build/table/filters/scope-element.js +1 -1
- package/build/table/filters/scope-element.js.map +1 -0
- package/build/table/header-column-content.js +1 -1
- package/build/table/header-column-content.js.map +1 -0
- package/build/table/header-column.js +1 -1
- package/build/table/header-column.js.map +1 -0
- package/build/table/header-select.js +1 -1
- package/build/table/header-select.js.map +1 -0
- package/build/table/model-callback-args.js +1 -1
- package/build/table/model-callback-args.js.map +1 -0
- package/build/table/model-column.js +1 -1
- package/build/table/model-column.js.map +1 -0
- package/build/table/model-row.js +1 -1
- package/build/table/model-row.js.map +1 -0
- package/build/table/select-calculator.js +1 -1
- package/build/table/select-calculator.js.map +1 -0
- package/build/table/settings/column-row.js +1 -1
- package/build/table/settings/column-row.js.map +1 -0
- package/build/table/settings/download-action.js +1 -1
- package/build/table/settings/download-action.js.map +1 -0
- package/build/table/settings/index.js +1 -1
- package/build/table/settings/index.js.map +1 -0
- package/build/table/table-settings.js +1 -1
- package/build/table/table-settings.js.map +1 -0
- package/build/table/table.js +1 -1
- package/build/table/table.js.map +1 -0
- package/build/table/use-sorting.js +1 -1
- package/build/table/use-sorting.js.map +1 -0
- package/build/table/widths.js +1 -1
- package/build/table/widths.js.map +1 -0
- package/build/table/worker-plugins-check-all-checkbox.js +1 -1
- package/build/table/worker-plugins-check-all-checkbox.js.map +1 -0
- package/build/table/worker-plugins-checkbox.js +1 -1
- package/build/table/worker-plugins-checkbox.js.map +1 -0
- package/build/translated-attributes.js +1 -1
- package/build/translated-attributes.js.map +1 -0
- package/build/translated-collections.js +1 -1
- package/build/translated-collections.js.map +1 -0
- package/build/updated-attribute.js +1 -1
- package/build/updated-attribute.js.map +1 -0
- package/build/url-encode.js +1 -1
- package/build/url-encode.js.map +1 -0
- package/build/use-breakpoint.js +1 -1
- package/build/use-breakpoint.js.map +1 -0
- package/build/use-can-can.js +1 -1
- package/build/use-can-can.js.map +1 -0
- package/build/use-collection.js +1 -1
- package/build/use-collection.js.map +1 -0
- package/build/use-created-event.js +1 -1
- package/build/use-created-event.js.map +1 -0
- package/build/use-current-user.js +1 -1
- package/build/use-current-user.js.map +1 -0
- package/build/use-destroyed-event.js +1 -1
- package/build/use-destroyed-event.js.map +1 -0
- package/build/use-event-emitter.js +1 -1
- package/build/use-event-emitter.js.map +1 -0
- package/build/use-event-listener.js +1 -1
- package/build/use-event-listener.js.map +1 -0
- package/build/use-input.js +1 -1
- package/build/use-input.js.map +1 -0
- package/build/use-model-event.js +1 -1
- package/build/use-model-event.js.map +1 -0
- package/build/use-model.js +1 -1
- package/build/use-model.js.map +1 -0
- package/build/use-resize-observer.js +1 -1
- package/build/use-resize-observer.js.map +1 -0
- package/build/use-router.js +1 -1
- package/build/use-router.js.map +1 -0
- package/build/use-screen-layout.js +1 -1
- package/build/use-screen-layout.js.map +1 -0
- package/build/use-updated-event.js +1 -1
- package/build/use-updated-event.js.map +1 -0
- package/build/use-validation-errors.js +1 -1
- package/build/use-validation-errors.js.map +1 -0
- package/build/utils/card.js +1 -1
- package/build/utils/card.js.map +1 -0
- package/build/utils/checkbox.js +1 -1
- package/build/utils/checkbox.js.map +1 -0
- package/build/utils/default-style.js +1 -1
- package/build/utils/default-style.js.map +1 -0
- package/build/utils/modal.js +1 -1
- package/build/utils/modal.js.map +1 -0
- package/build/utils/text.js +1 -1
- package/build/utils/text.js.map +1 -0
- package/build/validation-error.js +1 -1
- package/build/validation-error.js.map +1 -0
- package/build/validation-errors.js +1 -1
- package/build/validation-errors.js.map +1 -0
- package/build/with-collection.js +1 -1
- package/build/with-collection.js.map +1 -0
- package/build/with-current-user.js +1 -1
- package/build/with-current-user.js.map +1 -0
- package/build/with-model.js +1 -1
- package/build/with-model.js.map +1 -0
- package/build/with-router.js +1 -1
- package/build/with-router.js.map +1 -0
- package/link.sh +8 -0
- package/package.json +2 -2
- package/src/source-maps-loader.js +19 -7
|
@@ -94,4 +94,4 @@ export default memo(shapeComponent(class ColumnRow extends BaseComponent {
|
|
|
94
94
|
});
|
|
95
95
|
}
|
|
96
96
|
}));
|
|
97
|
-
//# sourceMappingURL=
|
|
97
|
+
//# sourceMappingURL=column-row.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-row.js","names":["React","useEffect","useRef","BaseComponent","columnIdentifier","memo","PropTypes","propTypesExact","shapeComponent","Text","View","ColumnRow","propTypes","column","object","isRequired","table","tableSettingColumn","setup","checked","p","visible","checkboxRef","updateCheckboxChecked","render","checkboxProps","indeterminate","createElement","dataSet","component","style","justifyContent","whiteSpace","_extends","className","onChange","onCheckboxChange","ref","type","headerLabelForColumn","updateTableSettingColumn","tt","current","undefined","update","events","emit"],"sources":["../../../src/table/settings/column-row.jsx"],"sourcesContent":["import React, {useEffect, useRef} from \"react\"\nimport BaseComponent from \"../../base-component\"\nimport columnIdentifier from \"../column-identifier\"\nimport memo from \"set-state-compare/src/memo\"\nimport PropTypes from \"prop-types\"\nimport propTypesExact from \"prop-types-exact\"\nimport {shapeComponent} from \"set-state-compare/src/shape-component\"\nimport Text from \"../../utils/text\"\nimport {View} from \"react-native\"\n\nexport default memo(shapeComponent(class ColumnRow extends BaseComponent {\n static propTypes = propTypesExact({\n column: PropTypes.object.isRequired,\n table: PropTypes.object.isRequired,\n tableSettingColumn: PropTypes.object.isRequired\n })\n\n setup() {\n this.checked = this.p.tableSettingColumn.visible()\n this.checkboxRef = useRef()\n\n useEffect(() => {\n this.updateCheckboxChecked()\n }, [this.checked])\n }\n\n render() {\n const {column, table, tableSettingColumn} = this.p\n const checkboxProps = {}\n\n if (tableSettingColumn.visible() === true) {\n checkboxProps.checked = \"checked\"\n } else if (tableSettingColumn.visible() === null) {\n checkboxProps.indeterminate = \"indeterminate\"\n }\n\n return (\n <View dataSet={{component: \"api-maker--table--settings--column-row\"}} style={{justifyContent: \"center\"}}>\n <label style={{whiteSpace: \"nowrap\"}}>\n <input\n className=\"api-maker--table--setings--column-checkbox\"\n data-identifier={columnIdentifier(column)}\n onChange={this.onCheckboxChange}\n ref={this.checkboxRef}\n type=\"checkbox\"\n {...checkboxProps}\n />\n <Text>\n {table.headerLabelForColumn(column)}\n </Text>\n </label>\n </View>\n )\n }\n\n onCheckboxChange = () => {\n const {checked} = this\n\n if (checked === true) {\n this.checked = null\n } else if (checked === null) {\n this.checked = false\n } else {\n this.checked = true\n }\n\n this.updateCheckboxChecked()\n this.updateTableSettingColumn()\n }\n\n updateCheckboxChecked() {\n const {checked} = this.tt\n\n if (checked === true) {\n this.checkboxRef.current.checked = true\n this.checkboxRef.current.indeterminate = undefined\n } else if (checked === null) {\n this.checkboxRef.current.checked = undefined\n this.checkboxRef.current.indeterminate = true\n } else {\n this.checkboxRef.current.checked = undefined\n this.checkboxRef.current.indeterminate = undefined\n }\n }\n\n async updateTableSettingColumn() {\n const {table, tableSettingColumn} = this.p\n\n await tableSettingColumn.update({visible: this.checked})\n\n table.events.emit(\"columnVisibilityUpdated\", {tableSettingColumn})\n }\n}))\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -76,4 +76,4 @@ export default memo(shapeComponent(class ApiMakerTableSettingsDownloadAction ext
|
|
|
76
76
|
saveAs(blob, fileName);
|
|
77
77
|
};
|
|
78
78
|
}));
|
|
79
|
-
//# sourceMappingURL=
|
|
79
|
+
//# sourceMappingURL=download-action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download-action.js","names":["BaseComponent","ColumnContent","columnIdentifier","columnVisible","saveAs","FontAwesomeIcon","memo","PropTypes","propTypesExact","React","renderToString","shapeComponent","Pressable","Text","ApiMakerTableSettingsDownloadAction","propTypes","table","object","isRequired","render","createElement","onPress","tt","onDownloadPress","style","flexDirection","alignItems","name","size","marginLeft","p","modelClass","collection","models","preparedColumns","s","tableElement","map","column","tableSettingColumn","key","headerLabelForColumn","model","id","mode","content","tableHTML","blob","Blob","type","fileName","modelName","human","count"],"sources":["../../../src/table/settings/download-action.jsx"],"sourcesContent":["import BaseComponent from \"../../base-component\"\nimport ColumnContent from \"../column-content\"\nimport columnIdentifier from \"../column-identifier\"\nimport columnVisible from \"../column-visible\"\nimport {saveAs} from \"file-saver\"\nimport FontAwesomeIcon from \"react-native-vector-icons/FontAwesome\"\nimport memo from \"set-state-compare/src/memo\"\nimport PropTypes from \"prop-types\"\nimport propTypesExact from \"prop-types-exact\"\nimport React from \"react\"\nimport {renderToString} from \"react-dom/server\"\nimport {shapeComponent} from \"set-state-compare/src/shape-component\"\nimport {Pressable} from \"react-native\"\nimport Text from \"../../utils/text\"\n\nexport default memo(shapeComponent(class ApiMakerTableSettingsDownloadAction extends BaseComponent {\n static propTypes = propTypesExact({\n table: PropTypes.object.isRequired\n })\n\n render() {\n return (\n <Pressable onPress={this.tt.onDownloadPress} style={{flexDirection: \"row\", alignItems: \"center\"}}>\n <FontAwesomeIcon name=\"download\" size={20} />\n <Text style={{marginLeft: 5}}>\n Download\n </Text>\n </Pressable>\n )\n }\n\n onDownloadPress = () => {\n const {table} = this.p\n const {modelClass} = table.p\n const {collection} = table.tt\n const {models} = collection\n const {preparedColumns} = table.s\n const tableElement = (\n <table>\n <thead>\n <tr>\n {preparedColumns?.map(({column, tableSettingColumn}) => columnVisible(column, tableSettingColumn) &&\n <th key={columnIdentifier(column)}>\n {table.headerLabelForColumn(column)}\n </th>\n )}\n </tr>\n </thead>\n <tbody>\n {models.map((model) =>\n <tr key={model.id()}>\n {preparedColumns?.map(({column, tableSettingColumn}) => columnVisible(column, tableSettingColumn) &&\n <td key={columnIdentifier(column)}>\n {new ColumnContent({column, mode: \"html\", model, table}).content()}\n </td>\n )}\n </tr>\n )}\n </tbody>\n </table>\n )\n const tableHTML = renderToString(tableElement)\n const blob = new Blob([tableHTML], {type: \"text/html;charset=utf-8\"})\n const fileName = `${modelClass.modelName().human({count: 2})}.html`\n\n saveAs(blob, fileName)\n }\n}))\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -89,4 +89,4 @@ export default memo(shapeComponent(class ApiMakerTableSettings extends BaseCompo
|
|
|
89
89
|
}))));
|
|
90
90
|
}
|
|
91
91
|
}));
|
|
92
|
-
//# sourceMappingURL=
|
|
92
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","useRef","BaseComponent","columnIdentifier","ColumnRow","DownloadAction","memo","Modal","PropTypes","propTypesExact","shapeComponent","View","Text","useI18n","ApiMakerTableSettings","propTypes","onRequestClose","func","isRequired","table","object","setup","t","namespace","rootRef","tableSetting","p","s","render","tt","preparedColumns","createElement","onBackdropPress","style","backgroundColor","transparent","dataSet","class","width","maxWidth","padding","border","marginBottom","fontSize","fontWeight","defaultValue","map","column","tableSettingColumn","key"],"sources":["../../../src/table/settings/index.jsx"],"sourcesContent":["import React, {useRef} from \"react\"\nimport BaseComponent from \"../../base-component\"\nimport columnIdentifier from \"../column-identifier\"\nimport ColumnRow from \"./column-row\"\nimport DownloadAction from \"./download-action\"\nimport memo from \"set-state-compare/src/memo\"\nimport Modal from \"../../modal\"\nimport PropTypes from \"prop-types\"\nimport propTypesExact from \"prop-types-exact\"\nimport {shapeComponent} from \"set-state-compare/src/shape-component\"\nimport {View} from \"react-native\"\nimport Text from \"../../utils/text\"\nimport useI18n from \"i18n-on-steroids/src/use-i18n\"\n\nexport default memo(shapeComponent(class ApiMakerTableSettings extends BaseComponent {\n static propTypes = propTypesExact({\n onRequestClose: PropTypes.func.isRequired,\n table: PropTypes.object.isRequired\n })\n\n setup() {\n const {t} = useI18n({namespace: \"js.api_maker.table.settings\"})\n\n this.rootRef = useRef()\n this.t = t\n }\n\n tableSetting = () => this.p.table.s.tableSetting\n\n render() {\n const {t} = this.tt\n const {table} = this.p\n const {preparedColumns} = table.s\n\n return (\n <Modal onBackdropPress={this.p.onRequestClose} onRequestClose={this.p.onRequestClose} style={{backgroundColor: \"#000\"}} transparent>\n <View\n dataSet={{class: \"api-maker--table--settings\"}}\n style={{\n width: \"100%\",\n maxWidth: 800,\n padding: 20,\n backgroundColor: \"#fff\",\n border: \"1px solid black\"\n }}\n >\n <View style={{marginBottom: 5}}>\n <Text style={{fontSize: 16, fontWeight: \"bold\"}}>\n {t(\".settings\", {defaultValue: \"Settings\"})}\n </Text>\n </View>\n <DownloadAction table={table} />\n <View style={{marginBottom: 5}}>\n <Text style={{fontSize: 16, fontWeight: \"bold\"}}>\n {t(\".columns\", {defaultValue: \"Columns\"})}\n </Text>\n </View>\n {preparedColumns?.map(({column, tableSettingColumn}) =>\n <ColumnRow column={column} key={columnIdentifier(column)} table={table} tableSettingColumn={tableSettingColumn} />\n )}\n </View>\n </Modal>\n )\n }\n}))\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -216,4 +216,4 @@ export default class ApiMakerTableSettings {
|
|
|
216
216
|
return tableSetting;
|
|
217
217
|
};
|
|
218
218
|
}
|
|
219
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb2x1bW5JZGVudGlmaWVyIiwiY29sdW1uVmlzaWJsZSIsImRpZ2ciLCJpbmZsZWN0aW9uIiwiTG9nZ2VyIiwiUmVhZGVyc1dyaXRlckxvY2siLCJzZXJpYWxpemUiLCJvYmplY3RUb0Zvcm1EYXRhIiwibW9kZWxzIiwidjQiLCJ1dWlkdjQiLCJsb2dnZXIiLCJuYW1lIiwiVGFibGVTZXR0aW5nIiwidGFibGVTZXR0aW5nc0xvY2tzIiwiQXBpTWFrZXJUYWJsZVNldHRpbmdzIiwiY29uc3RydWN0b3IiLCJ0YWJsZSIsInNldFRhYmxlU2V0dGluZ3NMb2NrIiwiaWRlbnRpZmllciIsInRhYmxlU2V0dGluZ3NMb2NrIiwiY29sdW1ucyIsImN1cnJlbnRVc2VyIiwicHJlcGFyZWRDb2x1bW5zIiwidGFibGVTZXR0aW5nIiwiY29sdW1uc0FzQXJyYXkiLCJvcmRlcmVkIiwib3JkZXJlZFRhYmxlU2V0dGluZ0NvbHVtbnMiLCJyZXN1bHQiLCJwcmVsb2FkIiwidGFibGVTZXR0aW5nQ29sdW1uIiwiY29sdW1uIiwiZmluZCIsInB1c2giLCJwYXRoIiwibWFwIiwicGF0aFBhcnQiLCJ1bmRlcnNjb3JlIiwiam9pbiIsImluY2x1ZGVzIiwibG9hZGVkIiwic29ydCIsInRhYmxlU2V0dGluZ0NvbHVtbjEiLCJ0YWJsZVNldHRpbmdDb2x1bW4yIiwicG9zaXRpb24iLCJsb2FkRXhpc3RpbmdPckNyZWF0ZVRhYmxlU2V0dGluZ3MiLCJ3cml0ZSIsImxvYWRUYWJsZVNldHRpbmciLCJ1cGRhdGVUYWJsZVNldHRpbmciLCJjcmVhdGVJbml0aWFsVGFibGVTZXR0aW5nIiwiRXJyb3IiLCJyYW5zYWNrIiwiaWRlbnRpZmllcl9lcSIsInVzZXJfaWRfZXEiLCJjdXJyZW50VXNlcklkT3JGYWxsYmFjayIsInVzZXJfdHlwZV9lcSIsImN1cnJlbnRVc2VyVHlwZU9yRmFsbGJhY2siLCJmaXJzdCIsImlkIiwiYW5vbnltb3VzZVVzZXJJZCIsIm1vZGVsQ2xhc3NEYXRhIiwidmFyaWFibGVOYW1lIiwibG9jYWxTdG9yYWdlIiwiZ2VuZXJhdGVkSWQiLCJ0YWJsZVNldHRpbmdEYXRhIiwidXNlcl9pZCIsInVzZXJfdHlwZSIsImNvbHVtbnNfYXR0cmlidXRlcyIsImNvbHVtbktleSIsImNvbHVtbkRhdGEiLCJjb2x1bW5TYXZlRGF0YSIsInRhYmxlU2V0dGluZ0Zvcm1EYXRhIiwidGFibGVfc2V0dGluZyIsInNhdmVSYXciLCJyZWxvYWRlZFRhYmxlU2V0dGluZyIsImF0dHJpYnV0ZV9uYW1lIiwiYXR0cmlidXRlIiwic29ydF9rZXkiLCJzb3J0S2V5IiwidmlzaWJsZSIsImNoYW5nZWRBdHRyaWJ1dGVzTGlzdCIsImNvbHVtbnNEYXRhIiwiY29sdW1uc0tleUNvdW50IiwiY2hhbmdlZCIsImxlbmd0aCIsImRlYnVnIiwibGFiZWwiLCJjb2x1bW5DaGFuZ2VkIiwiY2hhbmdlZEF0dHJpYnV0ZSIsImNvbHVtbkF0dHJpYnV0ZU5hbWUiLCJvbGRBdHRyaWJ1dGVWYWx1ZSIsIm5ld0F0dHJpYnV0ZVZhbHVlIiwiY29sdW1uUGF0aEFzU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsInRhYmxlU2V0dGluZ0NvbHVtblBhdGhBc1N0cmluZyIsImF0dHJpYnV0ZU5hbWUiLCJfZGVzdHJveSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YWJsZS90YWJsZS1zZXR0aW5ncy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29sdW1uSWRlbnRpZmllciBmcm9tIFwiLi9jb2x1bW4taWRlbnRpZmllclwiXG5pbXBvcnQgY29sdW1uVmlzaWJsZSBmcm9tIFwiLi9jb2x1bW4tdmlzaWJsZVwiXG5pbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi9sb2dnZXJcIlxuaW1wb3J0IHtSZWFkZXJzV3JpdGVyTG9ja30gZnJvbSBcImVwaWMtbG9ja3NcIlxuaW1wb3J0IHtzZXJpYWxpemUgYXMgb2JqZWN0VG9Gb3JtRGF0YX0gZnJvbSBcIm9iamVjdC10by1mb3JtZGF0YVwiXG5pbXBvcnQgbW9kZWxzIGZyb20gXCIuLi9tb2RlbHNcIlxuaW1wb3J0IHt2NCBhcyB1dWlkdjR9IGZyb20gXCJ1dWlkXCJcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcih7bmFtZTogXCJBcGlNYWtlciAvIFRhYmxlU2V0dGluZ3NcIn0pXG5jb25zdCB7VGFibGVTZXR0aW5nfSA9IG1vZGVsc1xuXG4vLyBIYXZlIGEgbG9jayBmb3IgZWFjaCB1bmlxdWUgdGFibGUgaWRlbnRpZmllclxuY29uc3QgdGFibGVTZXR0aW5nc0xvY2tzID0ge31cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpTWFrZXJUYWJsZVNldHRpbmdzIHtcbiAgY29uc3RydWN0b3Ioe3RhYmxlfSkge1xuICAgIHRoaXMudGFibGUgPSB0YWJsZVxuICAgIHRoaXMuc2V0VGFibGVTZXR0aW5nc0xvY2soKVxuICB9XG5cbiAgc2V0VGFibGVTZXR0aW5nc0xvY2soKSB7XG4gICAgY29uc3QgaWRlbnRpZmllciA9IHRoaXMuaWRlbnRpZmllcigpXG5cbiAgICBpZiAoIShpZGVudGlmaWVyIGluIHRhYmxlU2V0dGluZ3NMb2NrcykpIHtcbiAgICAgIHRhYmxlU2V0dGluZ3NMb2Nrc1tpZGVudGlmaWVyXSA9IG5ldyBSZWFkZXJzV3JpdGVyTG9jaygpXG4gICAgfVxuXG4gICAgdGhpcy50YWJsZVNldHRpbmdzTG9jayA9IGRpZ2codGFibGVTZXR0aW5nc0xvY2tzLCBpZGVudGlmaWVyKVxuICB9XG5cbiAgY29sdW1ucyA9ICgpID0+IGRpZ2codGhpcywgXCJ0YWJsZVwiLCBcImNvbHVtbnNBc0FycmF5XCIpKClcbiAgY3VycmVudFVzZXIgPSAoKSA9PiBkaWdnKHRoaXMsIFwidGFibGVcIiwgXCJwcm9wc1wiLCBcImN1cnJlbnRVc2VyXCIpXG4gIGlkZW50aWZpZXIgPSAoKSA9PiBkaWdnKHRoaXMsIFwidGFibGVcIiwgXCJzdGF0ZVwiLCBcImlkZW50aWZpZXJcIilcblxuICBwcmVwYXJlZENvbHVtbnMgPSAodGFibGVTZXR0aW5nKSA9PiB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMudGFibGUuY29sdW1uc0FzQXJyYXkoKVxuICAgIGNvbnN0IG9yZGVyZWQgPSB0aGlzLm9yZGVyZWRUYWJsZVNldHRpbmdDb2x1bW5zKHRhYmxlU2V0dGluZylcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBjb2x1bW5zOiBbXSxcbiAgICAgIHByZWxvYWQ6IFtdXG4gICAgfVxuXG4gICAgaWYgKCFvcmRlcmVkKSByZXR1cm5cblxuICAgIGZvciAoY29uc3QgdGFibGVTZXR0aW5nQ29sdW1uIG9mIG9yZGVyZWQpIHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW5JZGVudGlmaWVyKGNvbHVtbikgPT0gdGFibGVTZXR0aW5nQ29sdW1uLmlkZW50aWZpZXIoKSlcblxuICAgICAgcmVzdWx0LmNvbHVtbnMucHVzaCh7Y29sdW1uLCB0YWJsZVNldHRpbmdDb2x1bW59KVxuXG4gICAgICAvLyBBZGQgbmVlZGVkIHByZWxvYWRzIGlmIGNvbHVtbiBpcyB2aXNpYmxlXG4gICAgICBpZiAoY29sdW1uVmlzaWJsZShjb2x1bW4sIHRhYmxlU2V0dGluZ0NvbHVtbikpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5wYXRoKSB7XG4gICAgICAgICAgY29uc3QgcHJlbG9hZCA9IGNvbHVtbi5wYXRoLm1hcCgocGF0aFBhcnQpID0+IGluZmxlY3Rpb24udW5kZXJzY29yZShwYXRoUGFydCkpLmpvaW4oXCIuXCIpXG5cbiAgICAgICAgICBpZiAoIXJlc3VsdC5wcmVsb2FkLmluY2x1ZGVzKHByZWxvYWQpKSByZXN1bHQucHJlbG9hZC5wdXNoKHByZWxvYWQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBvcmRlcmVkVGFibGVTZXR0aW5nQ29sdW1ucyA9ICh0YWJsZVNldHRpbmcpID0+IHtcbiAgICByZXR1cm4gdGFibGVTZXR0aW5nXG4gICAgICAuY29sdW1ucygpXG4gICAgICAubG9hZGVkKClcbiAgICAgIC5zb3J0KCh0YWJsZVNldHRpbmdDb2x1bW4xLCB0YWJsZVNldHRpbmdDb2x1bW4yKSA9PiB0YWJsZVNldHRpbmdDb2x1bW4xLnBvc2l0aW9uKCkgLSB0YWJsZVNldHRpbmdDb2x1bW4yLnBvc2l0aW9uKCkpXG4gIH1cblxuICBsb2FkRXhpc3RpbmdPckNyZWF0ZVRhYmxlU2V0dGluZ3MgPSBhc3luYyAoKSA9PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudGFibGVTZXR0aW5nc0xvY2sud3JpdGUoYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHRhYmxlU2V0dGluZyA9IGF3YWl0IHRoaXMubG9hZFRhYmxlU2V0dGluZygpXG5cbiAgICAgIGlmICh0YWJsZVNldHRpbmcpIHtcbiAgICAgICAgdGFibGVTZXR0aW5nID0gYXdhaXQgdGhpcy51cGRhdGVUYWJsZVNldHRpbmcodGFibGVTZXR0aW5nKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFibGVTZXR0aW5nID0gYXdhaXQgdGhpcy5jcmVhdGVJbml0aWFsVGFibGVTZXR0aW5nKClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRhYmxlU2V0dGluZ1xuICAgIH0pXG4gIH1cblxuICBsb2FkVGFibGVTZXR0aW5nID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghVGFibGVTZXR0aW5nKSB0aHJvdyBuZXcgRXJyb3IoXCJUYWJsZVNldHRpbmcgbW9kZWwgaXNuJ3QgZ2xvYmFsbHkgYXZhaWxhYmxlXCIpXG5cbiAgICBjb25zdCB0YWJsZVNldHRpbmcgPSBhd2FpdCBUYWJsZVNldHRpbmdcbiAgICAgIC5yYW5zYWNrKHtcbiAgICAgICAgaWRlbnRpZmllcl9lcTogdGhpcy5pZGVudGlmaWVyKCksXG4gICAgICAgIHVzZXJfaWRfZXE6IHRoaXMuY3VycmVudFVzZXJJZE9yRmFsbGJhY2soKSxcbiAgICAgICAgdXNlcl90eXBlX2VxOiB0aGlzLmN1cnJlbnRVc2VyVHlwZU9yRmFsbGJhY2soKVxuICAgICAgfSlcbiAgICAgIC5wcmVsb2FkKFwiY29sdW1uc1wiKVxuICAgICAgLmZpcnN0KClcblxuICAgIHJldHVybiB0YWJsZVNldHRpbmdcbiAgfVxuXG4gIGN1cnJlbnRVc2VySWRPckZhbGxiYWNrKCkge1xuICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gdGhpcy5jdXJyZW50VXNlcigpXG5cbiAgICBpZiAoY3VycmVudFVzZXIpIHJldHVybiBjdXJyZW50VXNlci5pZCgpXG5cbiAgICByZXR1cm4gdGhpcy5hbm9ueW1vdXNlVXNlcklkKClcbiAgfVxuXG4gIGN1cnJlbnRVc2VyVHlwZU9yRmFsbGJhY2soKSB7XG4gICAgY29uc3QgY3VycmVudFVzZXIgPSB0aGlzLmN1cnJlbnRVc2VyKClcblxuICAgIGlmIChjdXJyZW50VXNlcikgcmV0dXJuIGRpZ2coY3VycmVudFVzZXIubW9kZWxDbGFzc0RhdGEoKSwgXCJuYW1lXCIpXG5cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgYW5vbnltb3VzZVVzZXJJZCgpIHtcbiAgICBjb25zdCB2YXJpYWJsZU5hbWUgPSBgQXBpTWFrZXJUYWJsZUFub255bW91c1VzZXJJZC0ke3RoaXMuaWRlbnRpZmllcigpfWBcblxuICAgIGlmICghKHZhcmlhYmxlTmFtZSBpbiBsb2NhbFN0b3JhZ2UpKSB7XG4gICAgICBjb25zdCBnZW5lcmF0ZWRJZCA9IHV1aWR2NCgpXG5cbiAgICAgIGxvY2FsU3RvcmFnZVt2YXJpYWJsZU5hbWVdID0gZ2VuZXJhdGVkSWRcbiAgICB9XG5cbiAgICByZXR1cm4gZGlnZyhsb2NhbFN0b3JhZ2UsIHZhcmlhYmxlTmFtZSlcbiAgfVxuXG4gIGNyZWF0ZUluaXRpYWxUYWJsZVNldHRpbmcgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdGFibGVTZXR0aW5nRGF0YSA9IHtcbiAgICAgIGlkZW50aWZpZXI6IHRoaXMuaWRlbnRpZmllcigpLFxuICAgICAgdXNlcl9pZDogdGhpcy5jdXJyZW50VXNlcklkT3JGYWxsYmFjaygpLFxuICAgICAgdXNlcl90eXBlOiB0aGlzLmN1cnJlbnRVc2VyVHlwZU9yRmFsbGJhY2soKSxcbiAgICAgIGNvbHVtbnNfYXR0cmlidXRlczoge31cbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zKClcblxuICAgIGZvciAoY29uc3QgY29sdW1uS2V5IGluIGNvbHVtbnMpIHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IGRpZ2coY29sdW1ucywgY29sdW1uS2V5KVxuICAgICAgY29uc3QgaWRlbnRpZmllciA9IGNvbHVtbklkZW50aWZpZXIoY29sdW1uKVxuICAgICAgY29uc3QgY29sdW1uRGF0YSA9IHRoaXMuY29sdW1uU2F2ZURhdGEoY29sdW1uLCB7aWRlbnRpZmllciwgcG9zaXRpb246IGNvbHVtbktleX0pXG5cbiAgICAgIHRhYmxlU2V0dGluZ0RhdGEuY29sdW1uc19hdHRyaWJ1dGVzW2NvbHVtbktleV0gPSBjb2x1bW5EYXRhXG4gICAgfVxuXG4gICAgY29uc3QgdGFibGVTZXR0aW5nID0gbmV3IFRhYmxlU2V0dGluZygpXG4gICAgY29uc3QgdGFibGVTZXR0aW5nRm9ybURhdGEgPSBvYmplY3RUb0Zvcm1EYXRhKHt0YWJsZV9zZXR0aW5nOiB0YWJsZVNldHRpbmdEYXRhfSlcblxuICAgIGF3YWl0IHRhYmxlU2V0dGluZy5zYXZlUmF3KHRhYmxlU2V0dGluZ0Zvcm1EYXRhKVxuXG4gICAgY29uc3QgcmVsb2FkZWRUYWJsZVNldHRpbmcgPSBhd2FpdCB0aGlzLmxvYWRUYWJsZVNldHRpbmcoKVxuXG4gICAgcmV0dXJuIHJlbG9hZGVkVGFibGVTZXR0aW5nXG4gIH1cblxuICBjb2x1bW5TYXZlRGF0YShjb2x1bW4sIHtpZGVudGlmaWVyLCBwb3NpdGlvbn0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRlX25hbWU6IGNvbHVtbi5hdHRyaWJ1dGUsXG4gICAgICBpZGVudGlmaWVyLFxuICAgICAgcGF0aDogY29sdW1uLnBhdGgsXG4gICAgICBwb3NpdGlvbixcbiAgICAgIHNvcnRfa2V5OiBjb2x1bW4uc29ydEtleSxcbiAgICAgIHZpc2libGU6IG51bGxcbiAgICB9XG4gIH1cblxuICB1cGRhdGVUYWJsZVNldHRpbmcgPSBhc3luYyAodGFibGVTZXR0aW5nKSA9PiB7XG4gICAgY29uc3QgY2hhbmdlZEF0dHJpYnV0ZXNMaXN0ID0gW1wiYXR0cmlidXRlTmFtZVwiLCBcInNvcnRLZXlcIl1cbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zKClcbiAgICBjb25zdCBjb2x1bW5zRGF0YSA9IHt9XG4gICAgY29uc3QgdGFibGVTZXR0aW5nRGF0YSA9IHtjb2x1bW5zX2F0dHJpYnV0ZXM6IGNvbHVtbnNEYXRhfVxuICAgIGxldCBjb2x1bW5zS2V5Q291bnQgPSAwXG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZVxuXG4gICAgLy8gQWRkIG1pc3NpbmcgY29sdW1uc1xuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcbiAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSBjb2x1bW5JZGVudGlmaWVyKGNvbHVtbilcbiAgICAgIGNvbnN0IHRhYmxlU2V0dGluZ0NvbHVtbiA9IHRhYmxlU2V0dGluZy5jb2x1bW5zKCkubG9hZGVkKCkuZmluZCgodGFibGVTZXR0aW5nQ29sdW1uKSA9PiB0YWJsZVNldHRpbmdDb2x1bW4uaWRlbnRpZmllcigpID09IGlkZW50aWZpZXIpXG5cbiAgICAgIGlmICghdGFibGVTZXR0aW5nQ29sdW1uKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbktleSA9ICsrY29sdW1uc0tleUNvdW50XG5cbiAgICAgICAgY29sdW1uc0RhdGFbY29sdW1uS2V5XSA9IHRoaXMuY29sdW1uU2F2ZURhdGEoXG4gICAgICAgICAgY29sdW1uLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkZW50aWZpZXIsXG4gICAgICAgICAgICBwb3NpdGlvbjogdGFibGVTZXR0aW5nLmNvbHVtbnMoKS5sb2FkZWQoKS5sZW5ndGggKyBjb2x1bW5LZXlcbiAgICAgICAgICB9XG4gICAgICAgIClcblxuICAgICAgICBsb2dnZXIuZGVidWcoKCkgPT4gYENoYW5nZWQgYmVjYXVzZSBvZiBuZXcgY29sdW1uOiAke2NvbHVtbi5sYWJlbH1gKVxuICAgICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgdGFibGVTZXR0aW5nQ29sdW1uIG9mIHRhYmxlU2V0dGluZy5jb2x1bW5zKCkubG9hZGVkKCkpIHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW5JZGVudGlmaWVyKGNvbHVtbikgPT0gdGFibGVTZXR0aW5nQ29sdW1uLmlkZW50aWZpZXIoKSlcblxuICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAvLyBUT0RPOiBVcGRhdGUgY29sdW1uIGlmIGNoYW5nZWRcbiAgICAgICAgbGV0IGNvbHVtbkNoYW5nZWQgPSBmYWxzZVxuXG4gICAgICAgIGZvciAoY29uc3QgY2hhbmdlZEF0dHJpYnV0ZSBvZiBjaGFuZ2VkQXR0cmlidXRlc0xpc3QpIHtcbiAgICAgICAgICBsZXQgY29sdW1uQXR0cmlidXRlTmFtZVxuXG4gICAgICAgICAgaWYgKGNoYW5nZWRBdHRyaWJ1dGUgPT0gXCJhdHRyaWJ1dGVOYW1lXCIpIHtcbiAgICAgICAgICAgIGNvbHVtbkF0dHJpYnV0ZU5hbWUgPSBcImF0dHJpYnV0ZVwiXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbHVtbkF0dHJpYnV0ZU5hbWUgPSBjaGFuZ2VkQXR0cmlidXRlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgb2xkQXR0cmlidXRlVmFsdWUgPSB0YWJsZVNldHRpbmdDb2x1bW5bY2hhbmdlZEF0dHJpYnV0ZV0oKVxuICAgICAgICAgIGNvbnN0IG5ld0F0dHJpYnV0ZVZhbHVlID0gY29sdW1uW2NvbHVtbkF0dHJpYnV0ZU5hbWVdXG5cbiAgICAgICAgICBpZiAob2xkQXR0cmlidXRlVmFsdWUgIT0gbmV3QXR0cmlidXRlVmFsdWUpIHtcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygoKSA9PiBgJHtjaGFuZ2VkQXR0cmlidXRlfSBjaGFuZ2VkIGZyb20gJHtvbGRBdHRyaWJ1dGVWYWx1ZX0gdG8gJHtuZXdBdHRyaWJ1dGVWYWx1ZX0gb24gY29sdW1uOiAke2NvbHVtbi5sYWJlbH1gKVxuICAgICAgICAgICAgY29sdW1uQ2hhbmdlZCA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb2x1bW5QYXRoQXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShjb2x1bW4ucGF0aClcbiAgICAgICAgY29uc3QgdGFibGVTZXR0aW5nQ29sdW1uUGF0aEFzU3RyaW5nID0gdGFibGVTZXR0aW5nQ29sdW1uLnBhdGgoKVxuXG4gICAgICAgIGlmIChjb2x1bW5QYXRoQXNTdHJpbmcgIT0gdGFibGVTZXR0aW5nQ29sdW1uUGF0aEFzU3RyaW5nKSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKCgpID0+IGBQYXRoIGNoYW5nZWQgb24gJHtjb2x1bW4ubGFiZWx9IGZyb20gJHtjb2x1bW5QYXRoQXNTdHJpbmd9IHRvICR7dGFibGVTZXR0aW5nQ29sdW1uUGF0aEFzU3RyaW5nfWApXG4gICAgICAgICAgY29sdW1uQ2hhbmdlZCA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2x1bW5DaGFuZ2VkKSB7XG4gICAgICAgICAgY29uc3QgY29sdW1uS2V5ID0gKytjb2x1bW5zS2V5Q291bnRcblxuICAgICAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICAgICAgY29sdW1uc0RhdGFbY29sdW1uS2V5XSA9IHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZV9uYW1lOiBjb2x1bW4uYXR0cmlidXRlTmFtZSxcbiAgICAgICAgICAgIGlkOiB0YWJsZVNldHRpbmdDb2x1bW4uaWQoKSxcbiAgICAgICAgICAgIHBhdGg6IGNvbHVtbi5wYXRoLFxuICAgICAgICAgICAgc29ydF9rZXk6IGNvbHVtbi5zb3J0S2V5XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmVkIHNhdmVkIGNvbHVtbnMgbm8gbG9uZ2VyIGZvdW5kXG4gICAgICAgIGNvbnN0IGNvbHVtbktleSA9ICsrY29sdW1uc0tleUNvdW50XG5cbiAgICAgICAgY29sdW1uc0RhdGFbY29sdW1uS2V5XSA9IHtcbiAgICAgICAgICBpZDogdGFibGVTZXR0aW5nQ29sdW1uLmlkKCksXG4gICAgICAgICAgX2Rlc3Ryb3k6IHRydWVcbiAgICAgICAgfVxuICAgICAgICBjaGFuZ2VkID0gdHJ1ZVxuXG4gICAgICAgIGxvZ2dlci5kZWJ1ZygoKSA9PiBgQ29sdW1uIGdvdCByZW1vdmVkOiAke3RhYmxlU2V0dGluZ0NvbHVtbi5pZGVudGlmaWVyKCl9YClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgY29uc3QgdGFibGVTZXR0aW5nRm9ybURhdGEgPSBvYmplY3RUb0Zvcm1EYXRhKHt0YWJsZV9zZXR0aW5nOiB0YWJsZVNldHRpbmdEYXRhfSlcblxuICAgICAgYXdhaXQgdGFibGVTZXR0aW5nLnNhdmVSYXcodGFibGVTZXR0aW5nRm9ybURhdGEpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRhYmxlU2V0dGluZ1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLGdCQUFnQixNQUFNLHFCQUFxQjtBQUNsRCxPQUFPQyxhQUFhLE1BQU0sa0JBQWtCO0FBQzVDLFNBQVFDLElBQUksUUFBTyxXQUFXO0FBQzlCLE9BQU8sS0FBS0MsVUFBVSxNQUFNLFlBQVk7QUFDeEMsT0FBT0MsTUFBTSxNQUFNLFdBQVc7QUFDOUIsU0FBUUMsaUJBQWlCLFFBQU8sWUFBWTtBQUM1QyxTQUFRQyxTQUFTLElBQUlDLGdCQUFnQixRQUFPLG9CQUFvQjtBQUNoRSxPQUFPQyxNQUFNLE1BQU0sV0FB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
|
|
219
|
+
//# sourceMappingURL=table-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-settings.js","names":["columnIdentifier","columnVisible","digg","inflection","Logger","ReadersWriterLock","serialize","objectToFormData","models","v4","uuidv4","logger","name","TableSetting","tableSettingsLocks","ApiMakerTableSettings","constructor","table","setTableSettingsLock","identifier","tableSettingsLock","columns","currentUser","preparedColumns","tableSetting","columnsAsArray","ordered","orderedTableSettingColumns","result","preload","tableSettingColumn","column","find","push","path","map","pathPart","underscore","join","includes","loaded","sort","tableSettingColumn1","tableSettingColumn2","position","loadExistingOrCreateTableSettings","write","loadTableSetting","updateTableSetting","createInitialTableSetting","Error","ransack","identifier_eq","user_id_eq","currentUserIdOrFallback","user_type_eq","currentUserTypeOrFallback","first","id","anonymouseUserId","modelClassData","variableName","localStorage","generatedId","tableSettingData","user_id","user_type","columns_attributes","columnKey","columnData","columnSaveData","tableSettingFormData","table_setting","saveRaw","reloadedTableSetting","attribute_name","attribute","sort_key","sortKey","visible","changedAttributesList","columnsData","columnsKeyCount","changed","length","debug","label","columnChanged","changedAttribute","columnAttributeName","oldAttributeValue","newAttributeValue","columnPathAsString","JSON","stringify","tableSettingColumnPathAsString","attributeName","_destroy"],"sources":["../../src/table/table-settings.js"],"sourcesContent":["import columnIdentifier from \"./column-identifier\"\nimport columnVisible from \"./column-visible\"\nimport {digg} from \"diggerize\"\nimport * as inflection from \"inflection\"\nimport Logger from \"../logger\"\nimport {ReadersWriterLock} from \"epic-locks\"\nimport {serialize as objectToFormData} from \"object-to-formdata\"\nimport models from \"../models\"\nimport {v4 as uuidv4} from \"uuid\"\n\nconst logger = new Logger({name: \"ApiMaker / TableSettings\"})\nconst {TableSetting} = models\n\n// Have a lock for each unique table identifier\nconst tableSettingsLocks = {}\n\nexport default class ApiMakerTableSettings {\n constructor({table}) {\n this.table = table\n this.setTableSettingsLock()\n }\n\n setTableSettingsLock() {\n const identifier = this.identifier()\n\n if (!(identifier in tableSettingsLocks)) {\n tableSettingsLocks[identifier] = new ReadersWriterLock()\n }\n\n this.tableSettingsLock = digg(tableSettingsLocks, identifier)\n }\n\n columns = () => digg(this, \"table\", \"columnsAsArray\")()\n currentUser = () => digg(this, \"table\", \"props\", \"currentUser\")\n identifier = () => digg(this, \"table\", \"state\", \"identifier\")\n\n preparedColumns = (tableSetting) => {\n const columns = this.table.columnsAsArray()\n const ordered = this.orderedTableSettingColumns(tableSetting)\n const result = {\n columns: [],\n preload: []\n }\n\n if (!ordered) return\n\n for (const tableSettingColumn of ordered) {\n const column = columns.find((column) => columnIdentifier(column) == tableSettingColumn.identifier())\n\n result.columns.push({column, tableSettingColumn})\n\n // Add needed preloads if column is visible\n if (columnVisible(column, tableSettingColumn)) {\n if (column.path) {\n const preload = column.path.map((pathPart) => inflection.underscore(pathPart)).join(\".\")\n\n if (!result.preload.includes(preload)) result.preload.push(preload)\n }\n }\n }\n\n return result\n }\n\n orderedTableSettingColumns = (tableSetting) => {\n return tableSetting\n .columns()\n .loaded()\n .sort((tableSettingColumn1, tableSettingColumn2) => tableSettingColumn1.position() - tableSettingColumn2.position())\n }\n\n loadExistingOrCreateTableSettings = async () => {\n return await this.tableSettingsLock.write(async () => {\n let tableSetting = await this.loadTableSetting()\n\n if (tableSetting) {\n tableSetting = await this.updateTableSetting(tableSetting)\n } else {\n tableSetting = await this.createInitialTableSetting()\n }\n\n return tableSetting\n })\n }\n\n loadTableSetting = async () => {\n if (!TableSetting) throw new Error(\"TableSetting model isn't globally available\")\n\n const tableSetting = await TableSetting\n .ransack({\n identifier_eq: this.identifier(),\n user_id_eq: this.currentUserIdOrFallback(),\n user_type_eq: this.currentUserTypeOrFallback()\n })\n .preload(\"columns\")\n .first()\n\n return tableSetting\n }\n\n currentUserIdOrFallback() {\n const currentUser = this.currentUser()\n\n if (currentUser) return currentUser.id()\n\n return this.anonymouseUserId()\n }\n\n currentUserTypeOrFallback() {\n const currentUser = this.currentUser()\n\n if (currentUser) return digg(currentUser.modelClassData(), \"name\")\n\n return null\n }\n\n anonymouseUserId() {\n const variableName = `ApiMakerTableAnonymousUserId-${this.identifier()}`\n\n if (!(variableName in localStorage)) {\n const generatedId = uuidv4()\n\n localStorage[variableName] = generatedId\n }\n\n return digg(localStorage, variableName)\n }\n\n createInitialTableSetting = async () => {\n const tableSettingData = {\n identifier: this.identifier(),\n user_id: this.currentUserIdOrFallback(),\n user_type: this.currentUserTypeOrFallback(),\n columns_attributes: {}\n }\n\n const columns = this.columns()\n\n for (const columnKey in columns) {\n const column = digg(columns, columnKey)\n const identifier = columnIdentifier(column)\n const columnData = this.columnSaveData(column, {identifier, position: columnKey})\n\n tableSettingData.columns_attributes[columnKey] = columnData\n }\n\n const tableSetting = new TableSetting()\n const tableSettingFormData = objectToFormData({table_setting: tableSettingData})\n\n await tableSetting.saveRaw(tableSettingFormData)\n\n const reloadedTableSetting = await this.loadTableSetting()\n\n return reloadedTableSetting\n }\n\n columnSaveData(column, {identifier, position}) {\n return {\n attribute_name: column.attribute,\n identifier,\n path: column.path,\n position,\n sort_key: column.sortKey,\n visible: null\n }\n }\n\n updateTableSetting = async (tableSetting) => {\n const changedAttributesList = [\"attributeName\", \"sortKey\"]\n const columns = this.columns()\n const columnsData = {}\n const tableSettingData = {columns_attributes: columnsData}\n let columnsKeyCount = 0\n let changed = false\n\n // Add missing columns\n for (const column of columns) {\n const identifier = columnIdentifier(column)\n const tableSettingColumn = tableSetting.columns().loaded().find((tableSettingColumn) => tableSettingColumn.identifier() == identifier)\n\n if (!tableSettingColumn) {\n const columnKey = ++columnsKeyCount\n\n columnsData[columnKey] = this.columnSaveData(\n column,\n {\n identifier,\n position: tableSetting.columns().loaded().length + columnKey\n }\n )\n\n logger.debug(() => `Changed because of new column: ${column.label}`)\n changed = true\n }\n }\n\n for (const tableSettingColumn of tableSetting.columns().loaded()) {\n const column = columns.find((column) => columnIdentifier(column) == tableSettingColumn.identifier())\n\n if (column) {\n // TODO: Update column if changed\n let columnChanged = false\n\n for (const changedAttribute of changedAttributesList) {\n let columnAttributeName\n\n if (changedAttribute == \"attributeName\") {\n columnAttributeName = \"attribute\"\n } else {\n columnAttributeName = changedAttribute\n }\n\n const oldAttributeValue = tableSettingColumn[changedAttribute]()\n const newAttributeValue = column[columnAttributeName]\n\n if (oldAttributeValue != newAttributeValue) {\n logger.debug(() => `${changedAttribute} changed from ${oldAttributeValue} to ${newAttributeValue} on column: ${column.label}`)\n columnChanged = true\n }\n }\n\n const columnPathAsString = JSON.stringify(column.path)\n const tableSettingColumnPathAsString = tableSettingColumn.path()\n\n if (columnPathAsString != tableSettingColumnPathAsString) {\n logger.debug(() => `Path changed on ${column.label} from ${columnPathAsString} to ${tableSettingColumnPathAsString}`)\n columnChanged = true\n }\n\n if (columnChanged) {\n const columnKey = ++columnsKeyCount\n\n changed = true\n columnsData[columnKey] = {\n attribute_name: column.attributeName,\n id: tableSettingColumn.id(),\n path: column.path,\n sort_key: column.sortKey\n }\n }\n } else {\n // Removed saved columns no longer found\n const columnKey = ++columnsKeyCount\n\n columnsData[columnKey] = {\n id: tableSettingColumn.id(),\n _destroy: true\n }\n changed = true\n\n logger.debug(() => `Column got removed: ${tableSettingColumn.identifier()}`)\n }\n }\n\n if (changed) {\n const tableSettingFormData = objectToFormData({table_setting: tableSettingData})\n\n await tableSetting.saveRaw(tableSettingFormData)\n }\n\n return tableSetting\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/build/table/table.js
CHANGED
|
@@ -969,4 +969,4 @@ export default memo(shapeComponent(class ApiMakerTable extends BaseComponent {
|
|
|
969
969
|
};
|
|
970
970
|
submitFilterDebounce = debounce(this.tt.submitFilter);
|
|
971
971
|
}));
|
|
972
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkaWdnIiwiZGlncyIsIlJlYWN0IiwiY3JlYXRlQ29udGV4dCIsInVzZUNvbnRleHQiLCJ1c2VNZW1vIiwidXNlUmVmIiwiQW5pbWF0ZWQiLCJQcmVzc2FibGUiLCJWaWV3IiwiQmFzZUNvbXBvbmVudCIsIkNhcmQiLCJjbGFzc05hbWVzIiwiQ29sbGVjdGlvbiIsImNvbHVtblZpc2libGUiLCJkZWJvdW5jZSIsIkRyYWdnYWJsZVNvcnQiLCJFdmVudEVtaXR0ZXIiLCJGaWx0ZXJzIiwiRmxhdExpc3QiLCJGb250QXdlc29tZUljb24iLCJGb3JtIiwiSGVhZGVyIiwiSGVhZGVyQ29sdW1uIiwiSGVhZGVyU2VsZWN0IiwiaW5mbGVjdGlvbiIsIm1lbW8iLCJtb2RlbENsYXNzUmVxdWlyZSIsIk1vZGVsUm93IiwiUGFnaW5hdGUiLCJQYXJhbXMiLCJQcm9wVHlwZXMiLCJSb3ciLCJzZWxlY3RDYWxjdWxhdG9yIiwiU2VsZWN0IiwiU2V0dGluZ3MiLCJzaGFwZUNvbXBvbmVudCIsIlRhYmxlU2V0dGluZ3MiLCJUZXh0IiwidW5pcXVuaXplIiwidXNlQnJlYWtwb2ludCIsInVzZUNvbGxlY3Rpb24iLCJ1c2VJMThuIiwidXNlRXZlbnRFbWl0dGVyIiwidXNlTW9kZWxFdmVudCIsInVzZVF1ZXJ5UGFyYW1zIiwiV2lkdGhzIiwicGFnaW5hdGlvbk9wdGlvbnMiLCJXb3JrZXJQbHVnaW5zQ2hlY2tBbGxDaGVja2JveCIsImxhenkiLCJUYWJsZUNvbnRleHQiLCJMaXN0SGVhZGVyQ29tcG9uZW50Iiwic2V0dXAiLCJ1c2VTdGF0ZXMiLCJsYXN0VXBkYXRlIiwiRGF0ZSIsInJlbmRlciIsIm1kVXAiLCJ0YWJsZUNvbnRleHRWYWx1ZSIsInRhYmxlIiwiY29sbGVjdGlvbiIsImV2ZW50cyIsInF1ZXJ5V2l0aG91dFBhZ2luYXRpb24iLCJ0IiwidHQiLCJxdWVyeSIsIm9uQ29sdW1uVmlzaWJpbGl0eVVwZGF0ZWQiLCJjcmVhdGVFbGVtZW50IiwiZGF0YVNldCIsImNsYXNzIiwic3R5bGUiLCJzdHlsZUZvclJvd0hlYWRlciIsInAiLCJ3b3JrcGxhY2UiLCJzIiwiY3VycmVudFdvcmtwbGFjZSIsInN0eWxlRm9ySGVhZGVyIiwid2lkdGgiLCJ1bmRlZmluZWQiLCJtYXJnaW5Ib3Jpem9udGFsIiwibWFyZ2luTGVmdCIsImRlZmF1bHRWYWx1ZSIsInByZXBhcmVkQ29sdW1ucyIsIkZyYWdtZW50IiwiaGVhZGVyc0NvbnRlbnRGcm9tQ29sdW1ucyIsInR5cGUiLCJzZXRTdGF0ZSIsIkFwaU1ha2VyVGFibGUiLCJkZWZhdWx0UHJvcHMiLCJjYXJkIiwiY3VycmVudFVzZXIiLCJkZXN0cm95RW5hYmxlZCIsImZpbHRlckNhcmQiLCJmaWx0ZXJTdWJtaXRCdXR0b24iLCJub1JlY29yZHNBdmFpbGFibGVDb250ZW50Iiwibm9SZWNvcmRzRm91bmRDb250ZW50IiwicHJlbG9hZHMiLCJzZWxlY3QiLCJzdHlsZVVJIiwicHJvcFR5cGVzIiwiYWJpbGl0aWVzIiwib2JqZWN0IiwiYWN0aW9uc0NvbnRlbnQiLCJmdW5jIiwiYXBwSGlzdG9yeSIsImJvb2wiLCJpc1JlcXVpcmVkIiwiY2xhc3NOYW1lIiwic3RyaW5nIiwiaW5zdGFuY2VPZiIsImNvbHVtbnMiLCJvbmVPZlR5cGUiLCJhcnJheSIsImNvbnRyb2xzIiwiZGVmYXVsdERhdGVGb3JtYXROYW1lIiwiZGVmYXVsdERhdGVUaW1lRm9ybWF0TmFtZSIsImRlZmF1bHRQYXJhbXMiLCJkZXN0cm95TWVzc2FnZSIsImVkaXRNb2RlbFBhdGgiLCJmaWx0ZXJDb250ZW50IiwiZmlsdGVyU3VibWl0TGFiZWwiLCJub2RlIiwiZ3JvdXBCeSIsImhlYWRlciIsImlkZW50aWZpZXIiLCJtb2RlbENsYXNzIiwib25Nb2RlbHNMb2FkZWQiLCJwYWdpbmF0ZUNvbnRlbnQiLCJwYWdpbmF0aW9uQ29tcG9uZW50IiwicXVlcnlNZXRob2QiLCJxdWVyeU5hbWUiLCJzZWxlY3RDb2x1bW5zIiwic3R5bGVzIiwidmlld01vZGVsUGF0aCIsImRyYWdnYWJsZVNvcnRFdmVudHMiLCJ0YWJsZVNldHRpbmdzIiwibmFtZXNwYWNlIiwibmFtZSIsImJyZWFrcG9pbnQiLCJxdWVyeVBhcmFtcyIsInNldEluc3RhbmNlIiwiZmlsdGVyRm9ybVJlZiIsImNvbGxlY3Rpb25LZXkiLCJtb2RlbENsYXNzRGF0YSIsInByb3BzIiwicXVlcnlTTmFtZSIsImNvbHVtbnNBc0FycmF5IiwiY3VycmVudFdvcmtwbGFjZUNvdW50IiwiZmlsdGVyRm9ybSIsImNvbHVtbnNUb1Nob3ciLCJkcmFnZ2VkQ29sdW1uIiwicHJlbG9hZCIsInF1ZXJ5UU5hbWUiLCJxdWVyeVBhZ2VOYW1lIiwicmVzaXppbmciLCJzaG93RmlsdGVycyIsIkJvb2xlYW4iLCJzaG93U2V0dGluZ3MiLCJ0YWJsZVNldHRpbmciLCJ0YWJsZVNldHRpbmdMb2FkZWQiLCJ0YWJsZVNldHRpbmdGdWxsQ2FjaGVLZXkiLCJ3aWR0aHMiLCJjYWNoZUtleSIsImxvYWRDdXJyZW50V29ya3BsYWNlIiwidGhlbiIsImxvYWRDdXJyZW50V29ya3BsYWNlQ291bnQiLCJpZCIsImxvYWRUYWJsZVNldHRpbmciLCJvbkxpbmtzQ3JlYXRlZCIsIm9uTGlua3NEZXN0cm95ZWQiLCJjb2xsZWN0aW9uUmVhZHkiLCJhYmlsaXRpZXNUb0xvYWQiLCJpZkNvbmRpdGlvbiIsInBhZ2luYXRpb24iLCJzdGF0ZSIsImNsb25lIiwiZXhjZXB0Iiwib25EcmFnU3RhcnQiLCJvbkRyYWdFbmRBbmltYXRpb24iLCJnZXRDb2x1bW5zVG9TaG93IiwiaXRlbSIsImFuaW1hdGVkWkluZGV4Iiwic2V0VmFsdWUiLCJXb3JrcGxhY2UiLCJyZXN1bHQiLCJjdXJyZW50IiwiV29ya3BsYWNlTGluayIsInJhbnNhY2siLCJyZXNvdXJjZV90eXBlX2VxIiwid29ya3BsYWNlX2lkX2VxIiwiY291bnQiLCJmaWx0ZXIiLCJjb2x1bW4iLCJ0YWJsZVNldHRpbmdDb2x1bW4iLCJzb3J0IiwiYSIsImIiLCJwb3NpdGlvbiIsImxvYWRFeGlzdGluZ09yQ3JlYXRlVGFibGVTZXR0aW5ncyIsIm1lcmdlZFByZWxvYWRzIiwiZnVsbENhY2hlS2V5IiwidXBkYXRlU2V0dGluZ3NGdWxsQ2FjaGVLZXkiLCJjb25jYXQiLCJtb2RlbHMiLCJvdmVyYWxsQ291bnQiLCJxUGFyYW1zIiwic2hvd05vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQiLCJzaG93Tm9SZWNvcmRzRm91bmRDb250ZW50IiwiYXJncyIsIkVycm9yIiwib25MYXlvdXQiLCJvbkNvbnRhaW5lckxheW91dCIsImNvbnRhaW5lciIsImNhcmRPclRhYmxlIiwib3duQWJpbGl0aWVzIiwicHVzaCIsImxlbmd0aCIsIm1vZGVsQ2xhc3NOYW1lIiwibW9kZWxOYW1lIiwiYWJpbGl0eSIsInJlc3RQcm9wcyIsImhlYWRlckNvbnRlbnQiLCJQYWdpbmF0aW9uQ29tcG9uZW50IiwiaHVtYW4iLCJmbGF0TGlzdFN0eWxlIiwib3ZlcmZsb3dYIiwiYm9yZGVyIiwiYm9yZGVyUmFkaXVzIiwiZmxhdExpc3QiLCJQcm92aWRlciIsInZhbHVlIiwiX2V4dGVuZHMiLCJkYXRhIiwiZXh0cmFEYXRhIiwia2V5RXh0cmFjdG9yIiwia2V5RXh0cmF0b3IiLCJyZW5kZXJJdGVtIiwic2hvd3NIb3Jpem9udGFsU2Nyb2xsSW5kaWNhdG9yIiwidGFibGVDb250cm9scyIsImZvb3RlciIsInRhYmxlRm9vdGVyIiwiZSIsIm5hdGl2ZUV2ZW50IiwibGF5b3V0IiwidGFibGVXaWR0aCIsImNyZWF0ZWQiLCJhbW91bnRDcmVhdGVkIiwicHJldlN0YXRlIiwiZGVzdHJveWVkIiwiYW1vdW50RGVzdHJveWVkIiwibW9kZWwiLCJzdWJtaXRGaWx0ZXIiLCJzdWJtaXRGaWx0ZXJEZWJvdW5jZSIsImZvcm1SZWYiLCJvblN1Ym1pdCIsIm9uRmlsdGVyRm9ybVN1Ym1pdCIsInNldEZvcm0iLCJzZXRTdGF0ZXMiLCJvbkZpbHRlckNoYW5nZWQiLCJvbkZpbHRlckNoYW5nZWRXaXRoRGVsYXkiLCJtYXJnaW5Ub3AiLCJvbkZpbHRlckNsaWNrZWQiLCJwcmV2ZW50RGVmYXVsdCIsIm9uUGVyUGFnZUNoYW5nZWQiLCJuZXdQZXJQYWdlVmFsdWUiLCJwZXJLZXkiLCJwYXJhbXNDaGFuZ2UiLCJjaGFuZ2VQYXJhbXMiLCJpbmRleCIsImNvbHVtbldpZHRocyIsImtleSIsInN0eWxlRm9yQ29sdW1uIiwiY29sdW1uSW5kZXgiLCJldmVuIiwiZGVmYXVsdFN0eWxlIiwianVzdGlmeUNvbnRlbnQiLCJwYWRkaW5nIiwib3ZlcmZsb3ciLCJPYmplY3QiLCJhc3NpZ24iLCJiYWNrZ3JvdW5kQ29sb3IiLCJmbGV4RGlyZWN0aW9uIiwiYWxpZ25JdGVtcyIsIm1hcmdpblJpZ2h0IiwiYm9yZGVyUmlnaHQiLCJhY3R1YWxTdHlsZSIsInN0eWxlRm9ySGVhZGVyVGV4dCIsImZvbnRXZWlnaHQiLCJzdHlsZUZvclJvdyIsImZsZXgiLCJvblByZXNzIiwic2l6ZSIsIm9uUmVxdWVzdENsb3NlIiwib25SZXF1ZXN0Q2xvc2VTZXR0aW5ncyIsIm9uU2V0dGluZ3NDbGlja2VkIiwiY3VycmVudFBhZ2UiLCJ0b3RhbENvdW50IiwicGVyUGFnZSIsInRvIiwiTWF0aCIsIm1pbiIsImZyb20iLCJ0b3RhbF9jb3VudCIsInNlbGVjdGVkIiwib25DaGFuZ2UiLCJvcHRpb25zIiwiam9pbiIsImNvbHVtblByb3BzIiwidGV4dENlbnRlciIsInRleHRBbGlnbiIsInRleHRSaWdodCIsImhlYWRlclByb3BzIiwiaG9yaXpvbnRhbCIsImRyYWdMaXN0a2V5RXh0cmFjdG9yIiwib25JdGVtTW92ZWQiLCJvblJlb3JkZXJlZCIsImRyYWdMaXN0UmVuZGVySXRlbUNvbnRlbnQiLCJkcmFnTGlzdENhY2hlS2V5RXh0cmFjdG9yIiwiYW5pbWF0aW9uQXJncyIsIml0ZW1JbmRleCIsIngiLCJ5IiwiYW5pbWF0ZWRQb3NpdGlvbiIsInRpbWluZyIsInN0YXJ0IiwiZnJvbUl0ZW0iLCJmcm9tUG9zaXRpb24iLCJ0b0l0ZW0iLCJ0b1Bvc2l0aW9uIiwiVGFibGVTZXR0aW5nQ29sdW1uIiwiY29uc3RydWN0b3IiLCJ0b0NvbHVtbiIsImZpbmQiLCJ1cGRhdGUiLCJpc0FjdGl2ZSIsInRvdWNoUHJvcHMiLCJhbmltYXRlZFdpZHRoIiwiYWN0aXZlIiwiaGVhZGVyQ2xhc3NOYW1lRm9yQ29sdW1uIiwiY29tbW9uUHJvcHMiLCJoZWFkZXJMYWJlbEZvckNvbHVtbiIsImxhYmVsIiwiY3VycmVudE1vZGVsQ2xhc3MiLCJwYXRoIiwicGF0aFBhcnQiLCJyZWxhdGlvbnNoaXBzIiwicmVsYXRpb25zaGlwIiwicmVsYXRpb25zaGlwSW5BcnJheSIsInVuZGVyc2NvcmUiLCJhdHRyaWJ1dGUiLCJodW1hbkF0dHJpYnV0ZU5hbWUiLCJzZXJpYWxpemVGb3JtIiwiY2hhbmdlUGFyYW1zUGFyYW1zIiwiSlNPTiIsInN0cmluZ2lmeSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YWJsZS90YWJsZS5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtkaWdnLCBkaWdzfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCBSZWFjdCwge2NyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZU1lbW8sIHVzZVJlZn0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7QW5pbWF0ZWQsIFByZXNzYWJsZSwgVmlld30gZnJvbSBcInJlYWN0LW5hdGl2ZVwiXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tIFwiLi4vYmFzZS1jb21wb25lbnRcIlxuaW1wb3J0IENhcmQgZnJvbSBcIi4uL2Jvb3RzdHJhcC9jYXJkXCJcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCJcbmltcG9ydCBDb2xsZWN0aW9uIGZyb20gXCIuLi9jb2xsZWN0aW9uXCJcbmltcG9ydCBjb2x1bW5WaXNpYmxlIGZyb20gXCIuL2NvbHVtbi12aXNpYmxlXCJcbmltcG9ydCBkZWJvdW5jZSBmcm9tIFwiZGVib3VuY2VcIlxuaW1wb3J0IERyYWdnYWJsZVNvcnQgZnJvbSBcIi4uL2RyYWdnYWJsZS1zb3J0L2luZGV4XCJcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50c1wiXG5pbXBvcnQgRmlsdGVycyBmcm9tIFwiLi9maWx0ZXJzXCJcbmltcG9ydCBGbGF0TGlzdCBmcm9tIFwiLi9jb21wb25lbnRzL2ZsYXQtbGlzdFwiXG5pbXBvcnQgRm9udEF3ZXNvbWVJY29uIGZyb20gXCJyZWFjdC1uYXRpdmUtdmVjdG9yLWljb25zL0ZvbnRBd2Vzb21lXCJcbmltcG9ydCB7Rm9ybX0gZnJvbSBcIi4uL2Zvcm1cIlxuaW1wb3J0IEhlYWRlciBmcm9tIFwiLi9jb21wb25lbnRzL2hlYWRlclwiXG5pbXBvcnQgSGVhZGVyQ29sdW1uIGZyb20gXCIuL2hlYWRlci1jb2x1bW5cIlxuaW1wb3J0IEhlYWRlclNlbGVjdCBmcm9tIFwiLi9oZWFkZXItc2VsZWN0XCJcbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuaW1wb3J0IG1lbW8gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL3NyYy9tZW1vXCJcbmltcG9ydCBtb2RlbENsYXNzUmVxdWlyZSBmcm9tIFwiLi4vbW9kZWwtY2xhc3MtcmVxdWlyZVwiXG5pbXBvcnQgTW9kZWxSb3cgZnJvbSBcIi4vbW9kZWwtcm93XCJcbmltcG9ydCBQYWdpbmF0ZSBmcm9tIFwiLi4vYm9vdHN0cmFwL3BhZ2luYXRlXCJcbmltcG9ydCBQYXJhbXMgZnJvbSBcIi4uL3BhcmFtc1wiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBSb3cgZnJvbSBcIi4vY29tcG9uZW50cy9yb3dcIlxuaW1wb3J0IHNlbGVjdENhbGN1bGF0b3IgZnJvbSBcIi4vc2VsZWN0LWNhbGN1bGF0b3JcIlxuaW1wb3J0IFNlbGVjdCBmcm9tIFwiLi4vaW5wdXRzL3NlbGVjdFwiXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3MvaW5kZXhcIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudH0gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL3NyYy9zaGFwZS1jb21wb25lbnRcIlxuaW1wb3J0IFRhYmxlU2V0dGluZ3MgZnJvbSBcIi4vdGFibGUtc2V0dGluZ3NcIlxuaW1wb3J0IFRleHQgZnJvbSBcIi4uL3V0aWxzL3RleHRcIlxuaW1wb3J0IHVuaXF1bml6ZSBmcm9tIFwidW5pcXVuaXplXCJcbmltcG9ydCB1c2VCcmVha3BvaW50IGZyb20gXCIuLi91c2UtYnJlYWtwb2ludFwiXG5pbXBvcnQgdXNlQ29sbGVjdGlvbiBmcm9tIFwiLi4vdXNlLWNvbGxlY3Rpb25cIlxuaW1wb3J0IHVzZUkxOG4gZnJvbSBcImkxOG4tb24tc3Rlcm9pZHMvc3JjL3VzZS1pMThuXCJcbmltcG9ydCB1c2VFdmVudEVtaXR0ZXIgZnJvbSBcIi4uL3VzZS1ldmVudC1lbWl0dGVyXCJcbmltcG9ydCB1c2VNb2RlbEV2ZW50IGZyb20gXCIuLi91c2UtbW9kZWwtZXZlbnRcIlxuaW1wb3J0IHVzZVF1ZXJ5UGFyYW1zIGZyb20gXCJvbi1sb2NhdGlvbi1jaGFuZ2VkL3NyYy91c2UtcXVlcnktcGFyYW1zXCJcbmltcG9ydCBXaWR0aHMgZnJvbSBcIi4vd2lkdGhzXCJcblxuY29uc3QgcGFnaW5hdGlvbk9wdGlvbnMgPSBbMzAsIDYwLCA5MCwgW1wiQWxsXCIsIFwiYWxsXCJdXVxuY29uc3QgV29ya2VyUGx1Z2luc0NoZWNrQWxsQ2hlY2tib3ggPSBSZWFjdC5sYXp5KCgpID0+IGltcG9ydChcIi4vd29ya2VyLXBsdWdpbnMtY2hlY2stYWxsLWNoZWNrYm94XCIpKVxuY29uc3QgVGFibGVDb250ZXh0ID0gY3JlYXRlQ29udGV4dCgpXG5cbmNvbnN0IExpc3RIZWFkZXJDb21wb25lbnQgPSBtZW1vKHNoYXBlQ29tcG9uZW50KGNsYXNzIExpc3RIZWFkZXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgc2V0dXAoKSB7XG4gICAgdGhpcy51c2VTdGF0ZXMoe1xuICAgICAgbGFzdFVwZGF0ZTogbmV3IERhdGUoKVxuICAgIH0pXG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge21kVXB9ID0gdXNlQnJlYWtwb2ludCgpXG4gICAgY29uc3QgdGFibGVDb250ZXh0VmFsdWUgPSB1c2VDb250ZXh0KFRhYmxlQ29udGV4dClcbiAgICBjb25zdCB0YWJsZSA9IHRhYmxlQ29udGV4dFZhbHVlLnRhYmxlXG4gICAgY29uc3Qge2NvbGxlY3Rpb24sIGV2ZW50cywgcXVlcnlXaXRob3V0UGFnaW5hdGlvbiwgdH0gPSB0YWJsZS50dFxuICAgIGNvbnN0IHtxdWVyeX0gPSBkaWdzKGNvbGxlY3Rpb24sIFwicXVlcnlcIilcblxuICAgIHVzZUV2ZW50RW1pdHRlcihldmVudHMsIFwiY29sdW1uVmlzaWJpbGl0eVVwZGF0ZWRcIiwgdGhpcy50dC5vbkNvbHVtblZpc2liaWxpdHlVcGRhdGVkKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSb3cgZGF0YVNldD17e2NsYXNzOiBcImFwaS1tYWtlci90YWJsZS9oZWFkZXItcm93XCJ9fSBzdHlsZT17dGFibGUuc3R5bGVGb3JSb3dIZWFkZXIoKX0+XG4gICAgICAgIHt0YWJsZS5wLndvcmtwbGFjZSAmJiB0YWJsZS5zLmN1cnJlbnRXb3JrcGxhY2UgJiZcbiAgICAgICAgICA8SGVhZGVyIHN0eWxlPXt0YWJsZS5zdHlsZUZvckhlYWRlcih7c3R5bGU6IHt3aWR0aDogbWRVcCA/IDQxIDogdW5kZWZpbmVkfX0pfT5cbiAgICAgICAgICAgIDxXb3JrZXJQbHVnaW5zQ2hlY2tBbGxDaGVja2JveFxuICAgICAgICAgICAgICBjdXJyZW50V29ya3BsYWNlPXt0YWJsZS5zLmN1cnJlbnRXb3JrcGxhY2V9XG4gICAgICAgICAgICAgIHF1ZXJ5PXtxdWVyeVdpdGhvdXRQYWdpbmF0aW9ufVxuICAgICAgICAgICAgICBzdHlsZT17e21hcmdpbkhvcml6b250YWw6IFwiYXV0b1wifX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7IW1kVXAgJiZcbiAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3ttYXJnaW5MZWZ0OiAzfX0+XG4gICAgICAgICAgICAgICAge3QoXCIuc2VsZWN0X2FsbF9mb3VuZFwiLCB7ZGVmYXVsdFZhbHVlOiBcIlNlbGVjdCBhbGwgZm91bmRcIn0pfVxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgIH1cbiAgICAgICAgeyFtZFVwICYmXG4gICAgICAgICAgPEhlYWRlciBzdHlsZT17dGFibGUuc3R5bGVGb3JIZWFkZXIoe3N0eWxlOiB7fX0pfT5cbiAgICAgICAgICAgIDxIZWFkZXJTZWxlY3QgcHJlcGFyZWRDb2x1bW5zPXt0YWJsZS5zLnByZXBhcmVkQ29sdW1uc30gcXVlcnk9e3F1ZXJ5fSB0YWJsZT17dGFibGV9IC8+XG4gICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgIH1cbiAgICAgICAge21kVXAgJiZcbiAgICAgICAgICA8PlxuICAgICAgICAgICAge3RhYmxlLmhlYWRlcnNDb250ZW50RnJvbUNvbHVtbnMoKX1cbiAgICAgICAgICAgIDxIZWFkZXIgc3R5bGU9e3RhYmxlLnN0eWxlRm9ySGVhZGVyKHtzdHlsZToge30sIHR5cGU6IFwiYWN0aW9uc1wifSl9IC8+XG4gICAgICAgICAgPC8+XG4gICAgICAgIH1cbiAgICAgIDwvUm93PlxuICAgIClcbiAgfVxuXG4gIG9uQ29sdW1uVmlzaWJpbGl0eVVwZGF0ZWQgPSAoKSA9PiB0aGlzLnNldFN0YXRlKHtsYXN0VXBkYXRlOiBuZXcgRGF0ZSgpfSlcbn0pKVxuXG5leHBvcnQgZGVmYXVsdCBtZW1vKHNoYXBlQ29tcG9uZW50KGNsYXNzIEFwaU1ha2VyVGFibGUgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBjYXJkOiB0cnVlLFxuICAgIGN1cnJlbnRVc2VyOiBudWxsLFxuICAgIGRlc3Ryb3lFbmFibGVkOiB0cnVlLFxuICAgIGZpbHRlckNhcmQ6IHRydWUsXG4gICAgZmlsdGVyU3VibWl0QnV0dG9uOiB0cnVlLFxuICAgIG5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQ6IHVuZGVmaW5lZCxcbiAgICBub1JlY29yZHNGb3VuZENvbnRlbnQ6IHVuZGVmaW5lZCxcbiAgICBwcmVsb2FkczogW10sXG4gICAgc2VsZWN0OiB7fSxcbiAgICBzdHlsZVVJOiB0cnVlLFxuICAgIHdvcmtwbGFjZTogZmFsc2VcbiAgfVxuXG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgYWJpbGl0aWVzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGFjdGlvbnNDb250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBhcHBIaXN0b3J5OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGNhcmQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbGxlY3Rpb246IFByb3BUeXBlcy5pbnN0YW5jZU9mKENvbGxlY3Rpb24pLFxuICAgIGNvbHVtbnM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgICBjb250cm9sczogUHJvcFR5cGVzLmZ1bmMsXG4gICAgY3VycmVudFVzZXI6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZGVmYXVsdERhdGVGb3JtYXROYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRlZmF1bHREYXRlVGltZUZvcm1hdE5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZGVmYXVsdFBhcmFtczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBkZXN0cm95RW5hYmxlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBkZXN0cm95TWVzc2FnZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBlZGl0TW9kZWxQYXRoOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBmaWx0ZXJDYXJkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGZpbHRlckNvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGZpbHRlclN1Ym1pdExhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgICBncm91cEJ5OiBQcm9wVHlwZXMuYXJyYXksXG4gICAgaGVhZGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAgIGlkZW50aWZpZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbW9kZWxDbGFzczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBub1JlY29yZHNBdmFpbGFibGVDb250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBub1JlY29yZHNGb3VuZENvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uTW9kZWxzTG9hZGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBwYWdpbmF0ZUNvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIHBhZ2luYXRpb25Db21wb25lbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIHByZWxvYWRzOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICBxdWVyeU1ldGhvZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcXVlcnlOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNlbGVjdDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBzZWxlY3RDb2x1bW5zOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHN0eWxlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBzdHlsZVVJOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIHZpZXdNb2RlbFBhdGg6IFByb3BUeXBlcy5mdW5jLFxuICAgIHdvcmtwbGFjZTogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZFxuICB9XG5cbiAgZHJhZ2dhYmxlU29ydEV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBldmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgdGFibGVTZXR0aW5ncyA9IG51bGxcblxuICBzZXR1cCgpIHtcbiAgICBjb25zdCB7dH0gPSB1c2VJMThuKHtuYW1lc3BhY2U6IFwianMuYXBpX21ha2VyLnRhYmxlXCJ9KVxuICAgIGNvbnN0IHtuYW1lOiBicmVha3BvaW50LCBtZFVwfSA9IHVzZUJyZWFrcG9pbnQoKVxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdXNlUXVlcnlQYXJhbXMoKVxuXG4gICAgdGhpcy5zZXRJbnN0YW5jZSh7XG4gICAgICBicmVha3BvaW50LFxuICAgICAgZmlsdGVyRm9ybVJlZjogdXNlUmVmKCksXG4gICAgICBtZFVwLFxuICAgICAgdFxuICAgIH0pXG5cbiAgICBjb25zdCBjb2xsZWN0aW9uS2V5ID0gZGlnZyh0aGlzLnAubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLCBcImNvbGxlY3Rpb25LZXlcIilcbiAgICBsZXQgcXVlcnlOYW1lID0gdGhpcy5wcm9wcy5xdWVyeU5hbWVcblxuICAgIGlmICghcXVlcnlOYW1lKSBxdWVyeU5hbWUgPSBjb2xsZWN0aW9uS2V5XG5cbiAgICBjb25zdCBxdWVyeVNOYW1lID0gYCR7cXVlcnlOYW1lfV9zYFxuXG4gICAgdGhpcy51c2VTdGF0ZXMoe1xuICAgICAgY29sdW1uczogKCkgPT4gdGhpcy5jb2x1bW5zQXNBcnJheSgpLFxuICAgICAgY3VycmVudFdvcmtwbGFjZTogdW5kZWZpbmVkLFxuICAgICAgY3VycmVudFdvcmtwbGFjZUNvdW50OiBudWxsLFxuICAgICAgZmlsdGVyRm9ybTogbnVsbCxcbiAgICAgIGNvbHVtbnNUb1Nob3c6IG51bGwsXG4gICAgICBkcmFnZ2VkQ29sdW1uOiBudWxsLFxuICAgICAgaWRlbnRpZmllcjogKCkgPT4gdGhpcy5wcm9wcy5pZGVudGlmaWVyIHx8IGAke2NvbGxlY3Rpb25LZXl9LWRlZmF1bHRgLFxuICAgICAgbGFzdFVwZGF0ZTogKCkgPT4gbmV3IERhdGUoKSxcbiAgICAgIHByZWxvYWQ6IHVuZGVmaW5lZCxcbiAgICAgIHByZXBhcmVkQ29sdW1uczogdW5kZWZpbmVkLFxuICAgICAgcXVlcnlOYW1lLFxuICAgICAgcXVlcnlRTmFtZTogKCkgPT4gYCR7cXVlcnlOYW1lfV9xYCxcbiAgICAgIHF1ZXJ5UGFnZU5hbWU6ICgpID0+IGAke3F1ZXJ5TmFtZX1fcGFnZWAsXG4gICAgICBxdWVyeVNOYW1lLFxuICAgICAgcmVzaXppbmc6IGZhbHNlLFxuICAgICAgc2hvd0ZpbHRlcnM6ICgpID0+IEJvb2xlYW4ocXVlcnlQYXJhbXNbcXVlcnlTTmFtZV0pLFxuICAgICAgc2hvd1NldHRpbmdzOiBmYWxzZSxcbiAgICAgIHRhYmxlU2V0dGluZzogdW5kZWZpbmVkLFxuICAgICAgdGFibGVTZXR0aW5nTG9hZGVkOiBmYWxzZSxcbiAgICAgIHRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleTogdW5kZWZpbmVkLFxuICAgICAgd2lkdGg6IHVuZGVmaW5lZCxcbiAgICAgIHdpZHRoczogbnVsbFxuICAgIH0pXG5cbiAgICB0aGlzLnRhYmxlQ29udGV4dFZhbHVlID0gdXNlTWVtbyhcbiAgICAgICgpID0+ICh7XG4gICAgICAgIGNhY2hlS2V5OiB0aGlzLnMudGFibGVTZXR0aW5nRnVsbENhY2hlS2V5LFxuICAgICAgICBsYXN0VXBkYXRlOiB0aGlzLnMubGFzdFVwZGF0ZSxcbiAgICAgICAgcmVzaXppbmc6IHRoaXMucy5yZXNpemluZyxcbiAgICAgICAgdGFibGU6IHRoaXNcbiAgICAgIH0pLFxuICAgICAgW3RoaXMucy5sYXN0VXBkYXRlLCB0aGlzLnMucmVzaXppbmcsIHRoaXMucy50YWJsZVNldHRpbmdGdWxsQ2FjaGVLZXldXG4gICAgKVxuXG4gICAgdXNlTWVtbygoKSA9PiB7XG4gICAgICBpZiAodGhpcy5wcm9wcy53b3JrcGxhY2UpIHtcbiAgICAgICAgdGhpcy5sb2FkQ3VycmVudFdvcmtwbGFjZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZEN1cnJlbnRXb3JrcGxhY2VDb3VudCgpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSwgW3RoaXMucC5jdXJyZW50VXNlcj8uaWQoKV0pXG5cbiAgICB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy50dC50YWJsZVNldHRpbmdzICYmIHRoaXMucy53aWR0aCkge1xuICAgICAgICB0aGlzLmxvYWRUYWJsZVNldHRpbmcoKVxuICAgICAgfVxuICAgIH0sIFt0aGlzLnAuY3VycmVudFVzZXI/LmlkKCksIHRoaXMucy53aWR0aF0pXG5cbiAgICB1c2VNb2RlbEV2ZW50KHRoaXMucy5jdXJyZW50V29ya3BsYWNlLCBcIndvcmtwbGFjZV9saW5rc19jcmVhdGVkXCIsIHRoaXMudHQub25MaW5rc0NyZWF0ZWQpXG4gICAgdXNlTW9kZWxFdmVudCh0aGlzLnMuY3VycmVudFdvcmtwbGFjZSwgXCJ3b3JrcGxhY2VfbGlua3NfZGVzdHJveWVkXCIsIHRoaXMudHQub25MaW5rc0Rlc3Ryb3llZClcblxuICAgIGxldCBjb2xsZWN0aW9uUmVhZHkgPSB0cnVlXG4gICAgbGV0IHNlbGVjdFxuXG4gICAgaWYgKCF0aGlzLnMucHJlcGFyZWRDb2x1bW5zKSB7XG4gICAgICBjb2xsZWN0aW9uUmVhZHkgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmIChjb2xsZWN0aW9uUmVhZHkpIHtcbiAgICAgIHNlbGVjdCA9IHNlbGVjdENhbGN1bGF0b3Ioe3RhYmxlOiB0aGlzfSlcbiAgICB9XG5cbiAgICB0aGlzLmNvbGxlY3Rpb24gPSB1c2VDb2xsZWN0aW9uKHtcbiAgICAgIGFiaWxpdGllczogdGhpcy5hYmlsaXRpZXNUb0xvYWQoKSxcbiAgICAgIGRlZmF1bHRQYXJhbXM6IHRoaXMucHJvcHMuZGVmYXVsdFBhcmFtcyxcbiAgICAgIGNvbGxlY3Rpb246IHRoaXMucHJvcHMuY29sbGVjdGlvbixcbiAgICAgIGdyb3VwQnk6IHRoaXMucHJvcHMuZ3JvdXBCeSxcbiAgICAgIGlmQ29uZGl0aW9uOiBjb2xsZWN0aW9uUmVhZHksXG4gICAgICBtb2RlbENsYXNzOiB0aGlzLnByb3BzLm1vZGVsQ2xhc3MsXG4gICAgICBvbk1vZGVsc0xvYWRlZDogdGhpcy5wcm9wcy5vbk1vZGVsc0xvYWRlZCxcbiAgICAgIG5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQ6IHRoaXMucHJvcHMubm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCxcbiAgICAgIG5vUmVjb3Jkc0ZvdW5kQ29udGVudDogdGhpcy5wcm9wcy5ub1JlY29yZHNGb3VuZENvbnRlbnQsXG4gICAgICBwYWdpbmF0aW9uOiB0cnVlLFxuICAgICAgcHJlbG9hZHM6IHRoaXMuc3RhdGUucHJlbG9hZCxcbiAgICAgIHF1ZXJ5TWV0aG9kOiB0aGlzLnByb3BzLnF1ZXJ5TWV0aG9kLFxuICAgICAgcXVlcnlOYW1lLFxuICAgICAgc2VsZWN0LFxuICAgICAgc2VsZWN0Q29sdW1uczogdGhpcy5wcm9wcy5zZWxlY3RDb2x1bW5zXG4gICAgfSlcbiAgICB0aGlzLnF1ZXJ5V2l0aG91dFBhZ2luYXRpb24gPSB1c2VNZW1vKFxuICAgICAgKCkgPT4gdGhpcy5jb2xsZWN0aW9uPy5xdWVyeT8uY2xvbmUoKT8uZXhjZXB0KFwicGFnZVwiKSxcbiAgICAgIFt0aGlzLmNvbGxlY3Rpb24ucXVlcnldXG4gICAgKVxuXG4gICAgdXNlRXZlbnRFbWl0dGVyKHRoaXMudHQuZHJhZ2dhYmxlU29ydEV2ZW50cywgXCJvbkRyYWdTdGFydFwiLCB0aGlzLnR0Lm9uRHJhZ1N0YXJ0KVxuICAgIHVzZUV2ZW50RW1pdHRlcih0aGlzLnR0LmRyYWdnYWJsZVNvcnRFdmVudHMsIFwib25EcmFnRW5kQW5pbWF0aW9uXCIsIHRoaXMudHQub25EcmFnRW5kQW5pbWF0aW9uKVxuICAgIHVzZUV2ZW50RW1pdHRlcih0aGlzLnR0LmV2ZW50cywgXCJjb2x1bW5WaXNpYmlsaXR5VXBkYXRlZFwiLCB0aGlzLnR0Lm9uQ29sdW1uVmlzaWJpbGl0eVVwZGF0ZWQpXG4gIH1cblxuICBvbkNvbHVtblZpc2liaWxpdHlVcGRhdGVkID0gKCkgPT4gdGhpcy5zZXRTdGF0ZSh7Y29sdW1uc1RvU2hvdzogdGhpcy5nZXRDb2x1bW5zVG9TaG93KHRoaXMucy5jb2x1bW5zKSwgbGFzdFVwZGF0ZTogbmV3IERhdGUoKX0pXG4gIG9uRHJhZ1N0YXJ0ID0gKHtpdGVtfSkgPT4gaXRlbS5hbmltYXRlZFpJbmRleC5zZXRWYWx1ZSg5OTk5KVxuICBvbkRyYWdFbmRBbmltYXRpb24gPSAoe2l0ZW19KSA9PiBpdGVtLmFuaW1hdGVkWkluZGV4LnNldFZhbHVlKDApXG5cbiAgYXN5bmMgbG9hZEN1cnJlbnRXb3JrcGxhY2UoKSB7XG4gICAgY29uc3QgV29ya3BsYWNlID0gbW9kZWxDbGFzc1JlcXVpcmUoXCJXb3JrcGxhY2VcIilcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBXb3JrcGxhY2UuY3VycmVudCgpXG4gICAgY29uc3QgY3VycmVudFdvcmtwbGFjZSA9IGRpZ2cocmVzdWx0LCBcImN1cnJlbnRcIiwgMClcblxuICAgIHRoaXMuc2V0U3RhdGUoe2N1cnJlbnRXb3JrcGxhY2V9KVxuICB9XG5cbiAgYXN5bmMgbG9hZEN1cnJlbnRXb3JrcGxhY2VDb3VudCgpIHtcbiAgICBjb25zdCBXb3JrcGxhY2VMaW5rID0gbW9kZWxDbGFzc1JlcXVpcmUoXCJXb3JrcGxhY2VMaW5rXCIpXG4gICAgY29uc3QgY3VycmVudFdvcmtwbGFjZUNvdW50ID0gYXdhaXQgV29ya3BsYWNlTGlua1xuICAgICAgLnJhbnNhY2soe1xuICAgICAgICByZXNvdXJjZV90eXBlX2VxOiB0aGlzLnAubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWUsXG4gICAgICAgIHdvcmtwbGFjZV9pZF9lcTogdGhpcy5zLmN1cnJlbnRXb3JrcGxhY2UuaWQoKVxuICAgICAgfSlcbiAgICAgIC5jb3VudCgpXG5cbiAgICB0aGlzLnNldFN0YXRlKHtjdXJyZW50V29ya3BsYWNlQ291bnR9KVxuICB9XG5cbiAgZ2V0Q29sdW1uc1RvU2hvdyhjb2x1bW5zKSB7XG4gICAgcmV0dXJuIGNvbHVtbnNcbiAgICAgIC5maWx0ZXIoKHtjb2x1bW4sIHRhYmxlU2V0dGluZ0NvbHVtbn0pID0+IGNvbHVtblZpc2libGUoY29sdW1uLCB0YWJsZVNldHRpbmdDb2x1bW4pKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEudGFibGVTZXR0aW5nQ29sdW1uLnBvc2l0aW9uKCkgLSBiLnRhYmxlU2V0dGluZ0NvbHVtbi5wb3NpdGlvbigpKVxuICB9XG5cbiAgYXN5bmMgbG9hZFRhYmxlU2V0dGluZygpIHtcbiAgICB0aGlzLnRhYmxlU2V0dGluZ3MgPSBuZXcgVGFibGVTZXR0aW5ncyh7dGFibGU6IHRoaXN9KVxuXG4gICAgY29uc3QgdGFibGVTZXR0aW5nID0gYXdhaXQgdGhpcy50YWJsZVNldHRpbmdzLmxvYWRFeGlzdGluZ09yQ3JlYXRlVGFibGVTZXR0aW5ncygpXG4gICAgY29uc3Qge2NvbHVtbnMsIHByZWxvYWR9ID0gdGhpcy50YWJsZVNldHRpbmdzLnByZXBhcmVkQ29sdW1ucyh0YWJsZVNldHRpbmcpXG4gICAgY29uc3Qge3dpZHRofSA9IHRoaXMuc1xuICAgIGNvbnN0IHdpZHRocyA9IG5ldyBXaWR0aHMoe2NvbHVtbnMsIHRhYmxlOiB0aGlzLCB3aWR0aH0pXG4gICAgY29uc3QgY29sdW1uc1RvU2hvdyA9IHRoaXMuZ2V0Q29sdW1uc1RvU2hvdyhjb2x1bW5zKVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBjb2x1bW5zLFxuICAgICAgY29sdW1uc1RvU2hvdyxcbiAgICAgIHByZXBhcmVkQ29sdW1uczogY29sdW1ucyxcbiAgICAgIHByZWxvYWQ6IHRoaXMubWVyZ2VkUHJlbG9hZHMocHJlbG9hZCksXG4gICAgICB0YWJsZVNldHRpbmcsXG4gICAgICB0YWJsZVNldHRpbmdMb2FkZWQ6IHRydWUsXG4gICAgICB0YWJsZVNldHRpbmdGdWxsQ2FjaGVLZXk6IHRhYmxlU2V0dGluZy5mdWxsQ2FjaGVLZXkoKSxcbiAgICAgIHdpZHRoc1xuICAgIH0pXG4gIH1cblxuICB1cGRhdGVTZXR0aW5nc0Z1bGxDYWNoZUtleSA9ICgpID0+IHRoaXMuc2V0U3RhdGUoe3RhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleTogdGhpcy5zdGF0ZS50YWJsZVNldHRpbmcuZnVsbENhY2hlS2V5KCl9KVxuXG4gIGNvbHVtbnNBc0FycmF5ID0gKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5jb2x1bW5zID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY29sdW1ucygpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY29sdW1uc1xuICB9XG5cbiAgbWVyZ2VkUHJlbG9hZHMocHJlbG9hZCkge1xuICAgIGNvbnN0IHtwcmVsb2Fkc30gPSB0aGlzLnByb3BzXG4gICAgbGV0IG1lcmdlZFByZWxvYWRzID0gW11cblxuICAgIGlmIChwcmVsb2FkcykgbWVyZ2VkUHJlbG9hZHMgPSBtZXJnZWRQcmVsb2Fkcy5jb25jYXQocHJlbG9hZHMpXG4gICAgaWYgKHByZWxvYWQpIG1lcmdlZFByZWxvYWRzID0gbWVyZ2VkUHJlbG9hZHMuY29uY2F0KHByZWxvYWQpXG5cbiAgICByZXR1cm4gdW5pcXVuaXplKG1lcmdlZFByZWxvYWRzKVxuICB9XG5cbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCB7bW9kZWxDbGFzcywgbm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCwgbm9SZWNvcmRzRm91bmRDb250ZW50fSA9IHRoaXMucFxuICAgIGNvbnN0IHtjb2xsZWN0aW9uLCBjdXJyZW50VXNlcn0gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge3F1ZXJ5TmFtZSwgcXVlcnlTTmFtZSwgc2hvd0ZpbHRlcnN9ID0gdGhpcy5zXG4gICAgY29uc3Qge1xuICAgICAgbW9kZWxzLFxuICAgICAgb3ZlcmFsbENvdW50LFxuICAgICAgcVBhcmFtcyxcbiAgICAgIHF1ZXJ5LFxuICAgICAgcmVzdWx0LFxuICAgICAgc2hvd05vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQsXG4gICAgICBzaG93Tm9SZWNvcmRzRm91bmRDb250ZW50XG4gICAgfSA9IGRpZ3MoXG4gICAgICB0aGlzLmNvbGxlY3Rpb24sXG4gICAgICBcIm1vZGVsc1wiLFxuICAgICAgXCJvdmVyYWxsQ291bnRcIixcbiAgICAgIFwicVBhcmFtc1wiLFxuICAgICAgXCJxdWVyeVwiLFxuICAgICAgXCJyZXN1bHRcIixcbiAgICAgIFwic2hvd05vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnRcIixcbiAgICAgIFwic2hvd05vUmVjb3Jkc0ZvdW5kQ29udGVudFwiXG4gICAgKVxuXG4gICAgaWYgKGNvbGxlY3Rpb24gJiYgY29sbGVjdGlvbi5hcmdzLm1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKS5uYW1lICE9IG1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKS5uYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBNb2RlbCBjbGFzcyBmcm9tIGNvbGxlY3Rpb24gJyR7Y29sbGVjdGlvbi5hcmdzLm1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKS5uYW1lfScgYCArXG4gICAgICAgIGBkaWRuJ3QgbWF0Y2ggbW9kZWwgY2xhc3Mgb24gdGFibGU6ICcke21vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKS5uYW1lfSdgXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IGRhdGFTZXQ9e3tjbGFzczogdGhpcy5jbGFzc05hbWUoKX19IG9uTGF5b3V0PXt0aGlzLnR0Lm9uQ29udGFpbmVyTGF5b3V0fSBzdHlsZT17dGhpcy5wcm9wcy5zdHlsZXM/LmNvbnRhaW5lcn0+XG4gICAgICAgIHtzaG93Tm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCAmJlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGl2ZS10YWJsZS0tbm8tcmVjb3Jkcy1hdmFpbGFibGUtY29udGVudFwiPlxuICAgICAgICAgICAge25vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQoe21vZGVscywgcVBhcmFtcywgb3ZlcmFsbENvdW50fSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAge3Nob3dOb1JlY29yZHNGb3VuZENvbnRlbnQgJiZcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxpdmUtdGFibGUtLW5vLXJlY29yZHMtZm91bmQtY29udGVudFwiPlxuICAgICAgICAgICAge25vUmVjb3Jkc0ZvdW5kQ29udGVudCh7bW9kZWxzLCBxUGFyYW1zLCBvdmVyYWxsQ291bnR9KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICB7c2hvd0ZpbHRlcnMgJiZcbiAgICAgICAgICA8RmlsdGVycyBjdXJyZW50VXNlcj17Y3VycmVudFVzZXJ9IG1vZGVsQ2xhc3M9e21vZGVsQ2xhc3N9IHF1ZXJ5TmFtZT17cXVlcnlOYW1lfSBxdWVyeVNOYW1lPXtxdWVyeVNOYW1lfSAvPlxuICAgICAgICB9XG4gICAgICAgIHtxUGFyYW1zICYmIHF1ZXJ5ICYmIHJlc3VsdCAmJiBtb2RlbHMgJiYgIXNob3dOb1JlY29yZHNBdmFpbGFibGVDb250ZW50ICYmICFzaG93Tm9SZWNvcmRzRm91bmRDb250ZW50ICYmXG4gICAgICAgICAgdGhpcy5jYXJkT3JUYWJsZSgpXG4gICAgICAgIH1cbiAgICAgIDwvVmlldz5cbiAgICApXG4gIH1cblxuICBhYmlsaXRpZXNUb0xvYWQgKCkge1xuICAgIGNvbnN0IGFiaWxpdGllc1RvTG9hZCA9IHt9XG4gICAgY29uc3Qge2FiaWxpdGllcywgbW9kZWxDbGFzc30gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qgb3duQWJpbGl0aWVzID0gW11cblxuICAgIGlmICh0aGlzLnByb3BzLmRlc3Ryb3lFbmFibGVkKSBvd25BYmlsaXRpZXMucHVzaChcImRlc3Ryb3lcIilcbiAgICBpZiAodGhpcy5wcm9wcy5lZGl0TW9kZWxQYXRoKSBvd25BYmlsaXRpZXMucHVzaChcImVkaXRcIilcbiAgICBpZiAodGhpcy5wcm9wcy52aWV3TW9kZWxQYXRoKSBvd25BYmlsaXRpZXMucHVzaChcInNob3dcIilcblxuICAgIGlmIChvd25BYmlsaXRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbW9kZWxDbGFzc05hbWUgPSBkaWdnKG1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKSwgXCJuYW1lXCIpXG5cbiAgICAgIGFiaWxpdGllc1RvTG9hZFttb2RlbENsYXNzTmFtZV0gPSBvd25BYmlsaXRpZXNcbiAgICB9XG5cbiAgICBpZiAoYWJpbGl0aWVzKSB7XG4gICAgICBmb3IgKGNvbnN0IG1vZGVsTmFtZSBpbiBhYmlsaXRpZXMpIHtcbiAgICAgICAgaWYgKCEobW9kZWxOYW1lIGluIGFiaWxpdGllc1RvTG9hZCkpIHtcbiAgICAgICAgICBhYmlsaXRpZXNUb0xvYWRbbW9kZWxOYW1lXSA9IFtdXG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGFiaWxpdHkgb2YgYWJpbGl0aWVzW21vZGVsTmFtZV0pIHtcbiAgICAgICAgICBhYmlsaXRpZXNUb0xvYWRbbW9kZWxOYW1lXS5wdXNoKGFiaWxpdHkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWJpbGl0aWVzVG9Mb2FkXG4gIH1cblxuICBjYXJkT3JUYWJsZSAoKSB7XG4gICAgY29uc3Qge1xuICAgICAgYWJpbGl0aWVzLFxuICAgICAgYWN0aW9uc0NvbnRlbnQsXG4gICAgICBhcHBIaXN0b3J5LFxuICAgICAgY2FyZCxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbGxlY3Rpb24sXG4gICAgICBjb2x1bW5zLFxuICAgICAgY29udHJvbHMsXG4gICAgICBjdXJyZW50VXNlcixcbiAgICAgIGRlZmF1bHREYXRlRm9ybWF0TmFtZSxcbiAgICAgIGRlZmF1bHREYXRlVGltZUZvcm1hdE5hbWUsXG4gICAgICBkZWZhdWx0UGFyYW1zLFxuICAgICAgZGVzdHJveUVuYWJsZWQsXG4gICAgICBkZXN0cm95TWVzc2FnZSxcbiAgICAgIGVkaXRNb2RlbFBhdGgsXG4gICAgICBmaWx0ZXJDYXJkLFxuICAgICAgZmlsdGVyQ29udGVudCxcbiAgICAgIGZpbHRlclN1Ym1pdEJ1dHRvbixcbiAgICAgIGZpbHRlclN1Ym1pdExhYmVsLFxuICAgICAgZ3JvdXBCeSxcbiAgICAgIGhlYWRlcixcbiAgICAgIGlkZW50aWZpZXIsXG4gICAgICBtb2RlbENsYXNzLFxuICAgICAgbm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCxcbiAgICAgIG5vUmVjb3Jkc0ZvdW5kQ29udGVudCxcbiAgICAgIG9uTW9kZWxzTG9hZGVkLFxuICAgICAgcGFnaW5hdGVDb250ZW50LFxuICAgICAgcGFnaW5hdGlvbkNvbXBvbmVudCxcbiAgICAgIHByZWxvYWRzLFxuICAgICAgcXVlcnlNZXRob2QsXG4gICAgICBxdWVyeU5hbWUsXG4gICAgICBzZWxlY3QsXG4gICAgICBzZWxlY3RDb2x1bW5zLFxuICAgICAgc3R5bGVVSSxcbiAgICAgIHZpZXdNb2RlbFBhdGgsXG4gICAgICB3b3JrcGxhY2UsXG4gICAgICAuLi5yZXN0UHJvcHNcbiAgICB9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHttb2RlbHMsIHFQYXJhbXMsIHF1ZXJ5LCByZXN1bHR9ID0gZGlncyh0aGlzLmNvbGxlY3Rpb24sIFwibW9kZWxzXCIsIFwicVBhcmFtc1wiLCBcInF1ZXJ5XCIsIFwicmVzdWx0XCIpXG5cbiAgICBsZXQgaGVhZGVyQ29udGVudCwgUGFnaW5hdGlvbkNvbXBvbmVudFxuXG4gICAgaWYgKHR5cGVvZiBoZWFkZXIgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBoZWFkZXJDb250ZW50ID0gaGVhZGVyKHttb2RlbHMsIHFQYXJhbXMsIHF1ZXJ5LCByZXN1bHR9KVxuICAgIH0gZWxzZSBpZiAoaGVhZGVyKSB7XG4gICAgICBoZWFkZXJDb250ZW50ID0gaGVhZGVyXG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlckNvbnRlbnQgPSBtb2RlbENsYXNzLm1vZGVsTmFtZSgpLmh1bWFuKHtjb3VudDogMn0pXG4gICAgfVxuXG4gICAgaWYgKCFwYWdpbmF0ZUNvbnRlbnQpIHtcbiAgICAgIGlmIChwYWdpbmF0aW9uQ29tcG9uZW50KSB7XG4gICAgICAgIFBhZ2luYXRpb25Db21wb25lbnQgPSBwYWdpbmF0aW9uQ29tcG9uZW50XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBQYWdpbmF0aW9uQ29tcG9uZW50ID0gUGFnaW5hdGVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBmbGF0TGlzdFN0eWxlID0ge1xuICAgICAgb3ZlcmZsb3dYOiBcImF1dG9cIlxuICAgIH1cblxuICAgIGlmIChzdHlsZVVJKSB7XG4gICAgICBmbGF0TGlzdFN0eWxlLmJvcmRlciA9IFwiMXB4IHNvbGlkICNkYmRiZGJcIlxuICAgICAgZmxhdExpc3RTdHlsZS5ib3JkZXJSYWRpdXMgPSA1XG4gICAgfVxuXG4gICAgY29uc3QgZmxhdExpc3QgPSAoXG4gICAgICA8VGFibGVDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt0aGlzLnR0LnRhYmxlQ29udGV4dFZhbHVlfT5cbiAgICAgICAgPEZsYXRMaXN0XG4gICAgICAgICAgZGF0YT17bW9kZWxzfVxuICAgICAgICAgIGRhdGFTZXQ9e3tcbiAgICAgICAgICAgIGNsYXNzOiBjbGFzc05hbWVzKFwiYXBpLW1ha2VyLS10YWJsZVwiLCBjbGFzc05hbWUpLFxuICAgICAgICAgICAgY2FjaGVLZXk6IHRoaXMucy50YWJsZVNldHRpbmdGdWxsQ2FjaGVLZXksXG4gICAgICAgICAgICBsYXN0VXBkYXRlOiB0aGlzLnMubGFzdFVwZGF0ZVxuICAgICAgICAgIH19XG4gICAgICAgICAgZXh0cmFEYXRhPXt0aGlzLnMubGFzdFVwZGF0ZX1cbiAgICAgICAgICBrZXlFeHRyYWN0b3I9e3RoaXMudHQua2V5RXh0cmF0b3J9XG4gICAgICAgICAgTGlzdEhlYWRlckNvbXBvbmVudD17TGlzdEhlYWRlckNvbXBvbmVudH1cbiAgICAgICAgICByZW5kZXJJdGVtPXt0aGlzLnR0LnJlbmRlckl0ZW19XG4gICAgICAgICAgc2hvd3NIb3Jpem9udGFsU2Nyb2xsSW5kaWNhdG9yXG4gICAgICAgICAgc3R5bGU9e2ZsYXRMaXN0U3R5bGV9XG4gICAgICAgICAgey4uLnJlc3RQcm9wc31cbiAgICAgICAgLz5cbiAgICAgIDwvVGFibGVDb250ZXh0LlByb3ZpZGVyPlxuICAgIClcblxuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7ZmlsdGVyQ29udGVudCAmJiBmaWx0ZXJDYXJkICYmXG4gICAgICAgICAgPENhcmQgY2xhc3NOYW1lPVwibGl2ZS10YWJsZS0tZmlsdGVyLWNhcmQgbWItNFwiPlxuICAgICAgICAgICAge3RoaXMuZmlsdGVyRm9ybSgpfVxuICAgICAgICAgIDwvQ2FyZD5cbiAgICAgICAgfVxuICAgICAgICB7ZmlsdGVyQ29udGVudCAmJiAhZmlsdGVyQ2FyZCAmJlxuICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybSgpXG4gICAgICAgIH1cbiAgICAgICAge2NhcmQgJiZcbiAgICAgICAgICA8Q2FyZFxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKFwibGl2ZS10YWJsZS0tdGFibGUtY2FyZFwiLCBcIm1iLTRcIiwgY2xhc3NOYW1lKX1cbiAgICAgICAgICAgIGNvbnRyb2xzPXt0aGlzLnRhYmxlQ29udHJvbHMoKX1cbiAgICAgICAgICAgIGhlYWRlcj17aGVhZGVyQ29udGVudH1cbiAgICAgICAgICAgIGZvb3Rlcj17dGhpcy50YWJsZUZvb3RlcigpfVxuICAgICAgICAgICAgey4uLnJlc3RQcm9wc31cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7ZmxhdExpc3R9XG4gICAgICAgICAgPC9DYXJkPlxuICAgICAgICB9XG4gICAgICAgIHshY2FyZCAmJiBmbGF0TGlzdH1cbiAgICAgICAge3Jlc3VsdCAmJiBQYWdpbmF0aW9uQ29tcG9uZW50ICYmXG4gICAgICAgICAgPFBhZ2luYXRpb25Db21wb25lbnQgcmVzdWx0PXtyZXN1bHR9IC8+XG4gICAgICAgIH1cbiAgICAgICAge3Jlc3VsdCAmJiBwYWdpbmF0ZUNvbnRlbnQgJiZcbiAgICAgICAgICBwYWdpbmF0ZUNvbnRlbnQoe3Jlc3VsdH0pXG4gICAgICAgIH1cbiAgICAgIDwvPlxuICAgIClcbiAgfVxuXG4gIG9uQ29udGFpbmVyTGF5b3V0ID0gKGUpID0+IHtcbiAgICBjb25zdCB7d2lkdGh9ID0gZS5uYXRpdmVFdmVudC5sYXlvdXRcbiAgICBjb25zdCB7d2lkdGhzfSA9IHRoaXMuc1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7d2lkdGh9KVxuICAgIGlmICh3aWR0aHMpIHdpZHRocy50YWJsZVdpZHRoID0gd2lkdGhcbiAgfVxuXG4gIG9uTGlua3NDcmVhdGVkID0gKHthcmdzfSkgPT4ge1xuICAgIGNvbnN0IG1vZGVsQ2xhc3NOYW1lID0gdGhpcy5wLm1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKS5uYW1lXG5cbiAgICBpZiAoYXJncy5jcmVhdGVkW21vZGVsQ2xhc3NOYW1lXSkge1xuICAgICAgY29uc3QgYW1vdW50Q3JlYXRlZCA9IGFyZ3MuY3JlYXRlZFttb2RlbENsYXNzTmFtZV0ubGVuZ3RoXG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoKHByZXZTdGF0ZSkgPT4gKHtcbiAgICAgICAgY3VycmVudFdvcmtwbGFjZUNvdW50OiBwcmV2U3RhdGUuY3VycmVudFdvcmtwbGFjZUNvdW50ICsgYW1vdW50Q3JlYXRlZFxuICAgICAgfSkpXG4gICAgfVxuICB9XG5cbiAgb25MaW5rc0Rlc3Ryb3llZCA9ICh7YXJnc30pID0+IHtcbiAgICBjb25zdCBtb2RlbENsYXNzTmFtZSA9IHRoaXMucC5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCkubmFtZVxuXG4gICAgaWYgKGFyZ3MuZGVzdHJveWVkW21vZGVsQ2xhc3NOYW1lXSkge1xuICAgICAgY29uc3QgYW1vdW50RGVzdHJveWVkID0gYXJncy5kZXN0cm95ZWRbbW9kZWxDbGFzc05hbWVdLmxlbmd0aFxuXG4gICAgICB0aGlzLnNldFN0YXRlKChwcmV2U3RhdGUpID0+ICh7XG4gICAgICAgIGN1cnJlbnRXb3JrcGxhY2VDb3VudDogcHJldlN0YXRlLmN1cnJlbnRXb3JrcGxhY2VDb3VudCAtIGFtb3VudERlc3Ryb3llZFxuICAgICAgfSkpXG4gICAgfVxuICB9XG5cbiAga2V5RXh0cmF0b3IgPSAobW9kZWwpID0+IGAke3RoaXMucy50YWJsZVNldHRpbmdGdWxsQ2FjaGVLZXl9LSR7bW9kZWwuaWQoKX1gXG5cbiAgZmlsdGVyRm9ybSA9ICgpID0+IHtcbiAgICBjb25zdCB7ZmlsdGVyRm9ybVJlZiwgc3VibWl0RmlsdGVyLCBzdWJtaXRGaWx0ZXJEZWJvdW5jZX0gPSB0aGlzLnR0XG4gICAgY29uc3Qge2ZpbHRlckNvbnRlbnQsIGZpbHRlclN1Ym1pdEJ1dHRvbn0gPSB0aGlzLnBcbiAgICBjb25zdCB7cXVlcnlRTmFtZX0gPSB0aGlzLnNcbiAgICBjb25zdCB7ZmlsdGVyU3VibWl0TGFiZWx9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHtxUGFyYW1zfSA9IGRpZ3ModGhpcy5jb2xsZWN0aW9uLCBcInFQYXJhbXNcIilcblxuICAgIHJldHVybiAoXG4gICAgICA8Rm9ybSBjbGFzc05hbWU9XCJsaXZlLXRhYmxlLS1maWx0ZXItZm9ybVwiIGZvcm1SZWY9e2ZpbHRlckZvcm1SZWZ9IG9uU3VibWl0PXt0aGlzLnR0Lm9uRmlsdGVyRm9ybVN1Ym1pdH0gc2V0Rm9ybT17dGhpcy5zZXRTdGF0ZXMuZmlsdGVyRm9ybX0+XG4gICAgICAgIHtcInNcIiBpbiBxUGFyYW1zICYmXG4gICAgICAgICAgPGlucHV0IG5hbWU9XCJzXCIgdHlwZT1cImhpZGRlblwiIHZhbHVlPXtxUGFyYW1zLnN9IC8+XG4gICAgICAgIH1cbiAgICAgICAge2ZpbHRlckNvbnRlbnQoe1xuICAgICAgICAgIG9uRmlsdGVyQ2hhbmdlZDogc3VibWl0RmlsdGVyLFxuICAgICAgICAgIG9uRmlsdGVyQ2hhbmdlZFdpdGhEZWxheTogc3VibWl0RmlsdGVyRGVib3VuY2UsXG4gICAgICAgICAgcVBhcmFtcyxcbiAgICAgICAgICBxdWVyeVFOYW1lXG4gICAgICAgIH0pfVxuICAgICAgICB7ZmlsdGVyU3VibWl0QnV0dG9uICYmXG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnkgbGl2ZS10YWJsZS0tc3VibWl0LWZpbHRlci1idXR0b25cIlxuICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICBzdHlsZT17e21hcmdpblRvcDogXCI4cHhcIn19XG4gICAgICAgICAgICB2YWx1ZT17ZmlsdGVyU3VibWl0TGFiZWwgfHwgdGhpcy50KFwiLmZpbHRlclwiLCB7ZGVmYXVsdFZhbHVlOiBcIkZpbHRlclwifSl9XG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgPC9Gb3JtPlxuICAgIClcbiAgfVxuXG4gIG9uRmlsdGVyQ2xpY2tlZCA9IChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgdGhpcy5zZXRTdGF0ZSh7c2hvd0ZpbHRlcnM6ICF0aGlzLnN0YXRlLnNob3dGaWx0ZXJzfSlcbiAgfVxuXG4gIG9uUGVyUGFnZUNoYW5nZWQgPSAoZSkgPT4ge1xuICAgIGNvbnN0IHtxdWVyeU5hbWV9ID0gdGhpcy5zXG4gICAgY29uc3QgbmV3UGVyUGFnZVZhbHVlID0gZGlnZyhlLCBcInRhcmdldFwiLCBcInZhbHVlXCIpXG4gICAgY29uc3QgcGVyS2V5ID0gYCR7cXVlcnlOYW1lfV9wZXJgXG4gICAgY29uc3QgcGFyYW1zQ2hhbmdlID0ge31cblxuICAgIHBhcmFtc0NoYW5nZVtwZXJLZXldID0gbmV3UGVyUGFnZVZhbHVlXG5cbiAgICBQYXJhbXMuY2hhbmdlUGFyYW1zKHBhcmFtc0NoYW5nZSlcbiAgfVxuXG4gIHJlbmRlckl0ZW0gPSAoe2luZGV4LCBpdGVtOiBtb2RlbH0pID0+IHtcbiAgICBpZiAoIXRoaXMucy50YWJsZVNldHRpbmdMb2FkZWQpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAge3RoaXMudChcIi5sb2FkaW5nX2RvdF9kb3RfZG90XCIsIHtkZWZhdWx0VmFsdWU6IFwiTG9hZGluZy4uLlwifSl9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxNb2RlbFJvd1xuICAgICAgICBjYWNoZUtleT17bW9kZWwuY2FjaGVLZXkoKX1cbiAgICAgICAgY29sdW1ucz17dGhpcy5zLmNvbHVtbnNUb1Nob3d9XG4gICAgICAgIGNvbHVtbldpZHRocz17dGhpcy5jb2x1bW5XaWR0aHMoKX1cbiAgICAgICAgZXZlbnRzPXt0aGlzLnR0LmV2ZW50c31cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBrZXk9e21vZGVsLmlkKCl9XG4gICAgICAgIG1vZGVsPXttb2RlbH1cbiAgICAgICAgdGFibGU9e3RoaXN9XG4gICAgICAgIHRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleT17dGhpcy5zLnRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgc3R5bGVGb3JDb2x1bW4gPSAoe2NvbHVtbiwgY29sdW1uSW5kZXgsIGV2ZW4sIHN0eWxlLCB0eXBlfSkgPT4ge1xuICAgIGNvbnN0IHtzdHlsZVVJfSA9IHRoaXMucFxuICAgIGNvbnN0IGRlZmF1bHRTdHlsZSA9IHtcbiAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgcGFkZGluZzogOCxcbiAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiXG4gICAgfVxuXG4gICAgaWYgKHN0eWxlVUkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oZGVmYXVsdFN0eWxlLCB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogZXZlbiA/IFwiI2Y1ZjVmNVwiIDogXCIjZmZmXCJcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT0gXCJhY3Rpb25zXCIpIHtcbiAgICAgIGRlZmF1bHRTdHlsZS5mbGV4RGlyZWN0aW9uID0gXCJyb3dcIlxuICAgICAgZGVmYXVsdFN0eWxlLmFsaWduSXRlbXMgPSBcImNlbnRlclwiXG5cbiAgICAgIGlmICh0aGlzLnR0Lm1kVXApIHtcbiAgICAgICAgZGVmYXVsdFN0eWxlLm1hcmdpbkxlZnQgPSBcImF1dG9cIlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmYXVsdFN0eWxlLm1hcmdpblJpZ2h0ID0gXCJhdXRvXCJcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudHQubWRVcCAmJiBzdHlsZVVJKSB7XG4gICAgICBkZWZhdWx0U3R5bGUuYm9yZGVyUmlnaHQgPSBcIjFweCBzb2xpZCAjZGJkYmRiXCJcbiAgICB9XG5cbiAgICBjb25zdCBhY3R1YWxTdHlsZSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICBkZWZhdWx0U3R5bGUsXG4gICAgICBzdHlsZVxuICAgIClcblxuICAgIHJldHVybiBhY3R1YWxTdHlsZVxuICB9XG5cbiAgc3R5bGVGb3JIZWFkZXIgPSAoe2NvbHVtbiwgY29sdW1uSW5kZXgsIHN0eWxlLCB0eXBlfSkgPT4ge1xuICAgIGNvbnN0IHttZFVwfSA9IHRoaXMudHRcbiAgICBjb25zdCBkZWZhdWx0U3R5bGUgPSB7XG4gICAgICBmbGV4RGlyZWN0aW9uOiBcInJvd1wiLFxuICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgIHBhZGRpbmc6IDhcbiAgICB9XG5cbiAgICBpZiAodHlwZSAhPSBcImFjdGlvbnNcIiAmJiBtZFVwICYmIHRoaXMucC5zdHlsZVVJKSB7XG4gICAgICBkZWZhdWx0U3R5bGUuYm9yZGVyUmlnaHQgPSBcIjFweCBzb2xpZCAjZGJkYmRiXCJcbiAgICB9XG5cbiAgICBjb25zdCBhY3R1YWxTdHlsZSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICBkZWZhdWx0U3R5bGUsXG4gICAgICBzdHlsZVxuICAgIClcblxuICAgIHJldHVybiBhY3R1YWxTdHlsZVxuICB9XG5cbiAgc3R5bGVGb3JIZWFkZXJUZXh0KCkge1xuICAgIGNvbnN0IGFjdHVhbFN0eWxlID0ge2ZvbnRXZWlnaHQ6IFwiYm9sZFwifVxuXG4gICAgcmV0dXJuIGFjdHVhbFN0eWxlXG4gIH1cblxuICBzdHlsZUZvclJvdyA9ICh7ZXZlbn0gPSB7fSkgPT4ge1xuICAgIGNvbnN0IGFjdHVhbFN0eWxlID0ge1xuICAgICAgZmxleDogMSxcbiAgICAgIGFsaWduSXRlbXM6IFwic3RyZXRjaFwiXG4gICAgfVxuXG4gICAgaWYgKGV2ZW4gJiYgdGhpcy5wLnN0eWxlVUkpIHtcbiAgICAgIGFjdHVhbFN0eWxlLmJhY2tncm91bmRDb2xvciA9IFwiI2Y1ZjVmNVwiXG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdHVhbFN0eWxlXG4gIH1cblxuICBzdHlsZUZvclJvd0hlYWRlciA9ICgpID0+IHtcbiAgICBjb25zdCBhY3R1YWxTdHlsZSA9IHtcbiAgICAgIGZsZXg6IDEsXG4gICAgICBhbGlnbkl0ZW1zOiBcInN0cmV0Y2hcIlxuICAgIH1cblxuICAgIHJldHVybiBhY3R1YWxTdHlsZVxuICB9XG5cbiAgdGFibGVDb250cm9scygpIHtcbiAgICBjb25zdCB7Y29udHJvbHN9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHtzaG93U2V0dGluZ3N9ID0gdGhpcy5zXG4gICAgY29uc3Qge21vZGVscywgcVBhcmFtcywgcXVlcnksIHJlc3VsdH0gPSBkaWdzKHRoaXMuY29sbGVjdGlvbiwgXCJtb2RlbHNcIiwgXCJxUGFyYW1zXCIsIFwicXVlcnlcIiwgXCJyZXN1bHRcIilcblxuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17e2ZsZXhEaXJlY3Rpb246IFwicm93XCJ9fT5cbiAgICAgICAge2NvbnRyb2xzICYmIGNvbnRyb2xzKHttb2RlbHMsIHFQYXJhbXMsIHF1ZXJ5LCByZXN1bHR9KX1cbiAgICAgICAgPFByZXNzYWJsZSBkYXRhU2V0PXt7Y2xhc3M6IFwiZmlsdGVyLWJ1dHRvblwifX0gb25QcmVzcz17dGhpcy50dC5vbkZpbHRlckNsaWNrZWR9PlxuICAgICAgICAgIDxGb250QXdlc29tZUljb24gbmFtZT1cInNlYXJjaFwiIHNpemU9ezIwfSAvPlxuICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3twb3NpdGlvbjogXCJyZWxhdGl2ZVwifX0+XG4gICAgICAgICAge3Nob3dTZXR0aW5ncyAmJlxuICAgICAgICAgICAgPFNldHRpbmdzIG9uUmVxdWVzdENsb3NlPXt0aGlzLnR0Lm9uUmVxdWVzdENsb3NlU2V0dGluZ3N9IHRhYmxlPXt0aGlzfSAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8UHJlc3NhYmxlIGRhdGFTZXQ9e3tjbGFzczogXCJzZXR0aW5ncy1idXR0b25cIn19IG9uUHJlc3M9e3RoaXMudHQub25TZXR0aW5nc0NsaWNrZWR9PlxuICAgICAgICAgICAgPEZvbnRBd2Vzb21lSWNvbiBuYW1lPVwiZ2VhclwiIHNpemU9ezIwfSAvPlxuICAgICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuICB9XG5cbiAgdGFibGVGb290ZXIoKSB7XG4gICAgY29uc3Qge3Jlc3VsdH0gPSBkaWdzKHRoaXMuY29sbGVjdGlvbiwgXCJyZXN1bHRcIilcbiAgICBjb25zdCBjdXJyZW50UGFnZSA9IHJlc3VsdC5jdXJyZW50UGFnZSgpXG4gICAgY29uc3QgdG90YWxDb3VudCA9IHJlc3VsdC50b3RhbENvdW50KClcbiAgICBjb25zdCBwZXJQYWdlID0gcmVzdWx0LnBlclBhZ2UoKVxuICAgIGNvbnN0IHRvID0gTWF0aC5taW4oY3VycmVudFBhZ2UgKiBwZXJQYWdlLCB0b3RhbENvdW50KVxuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IFwiU2hvd2luZyAle2Zyb219IHRvICV7dG99IG91dCBvZiAle3RvdGFsX2NvdW50fSB0b3RhbC5cIlxuICAgIGxldCBmcm9tID0gKChjdXJyZW50UGFnZSAtIDEpICogcGVyUGFnZSkgKyAxXG5cbiAgICBpZiAodG8gPT09IDApIGZyb20gPSAwXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e3tmbGV4RGlyZWN0aW9uOiBcInJvd1wiLCBqdXN0aWZ5Q29udGVudDogXCJzcGFjZS1iZXR3ZWVuXCIsIG1hcmdpblRvcDogMTB9fT5cbiAgICAgICAgPFZpZXcgZGF0YVNldD17e2NsYXNzOiBcInNob3dpbmctY291bnRzXCJ9fSBzdHlsZT17e2ZsZXhEaXJlY3Rpb246IFwicm93XCJ9fT5cbiAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIHt0aGlzLnQoXCIuc2hvd2luZ19mcm9tX3RvX291dF9vZl90b3RhbFwiLCB7ZGVmYXVsdFZhbHVlLCBmcm9tLCB0bywgdG90YWxfY291bnQ6IHRvdGFsQ291bnR9KX1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAge3RoaXMucC53b3JrcGxhY2UgJiYgdGhpcy5zLmN1cnJlbnRXb3JrcGxhY2VDb3VudCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3ttYXJnaW5MZWZ0OiAzfX0+XG4gICAgICAgICAgICAgIHt0aGlzLnQoXCIueF9zZWxlY3RlZFwiLCB7ZGVmYXVsdFZhbHVlOiBcIiV7c2VsZWN0ZWR9IHNlbGVjdGVkLlwiLCBzZWxlY3RlZDogdGhpcy5zLmN1cnJlbnRXb3JrcGxhY2VDb3VudH0pfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9WaWV3PlxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJwZXItcGFnZS1zZWxlY3RcIlxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXtwZXJQYWdlfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMudHQub25QZXJQYWdlQ2hhbmdlZH1cbiAgICAgICAgICAgIG9wdGlvbnM9e3BhZ2luYXRpb25PcHRpb25zfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApXG4gIH1cblxuICBjbGFzc05hbWUoKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IFtcImFwaS1tYWtlci0tdGFibGVcIl1cblxuICAgIGlmICh0aGlzLnByb3BzLmNsYXNzTmFtZSkge1xuICAgICAgY2xhc3NOYW1lcy5wdXNoKHRoaXMucHJvcHMuY2xhc3NOYW1lKVxuICAgIH1cblxuICAgIHJldHVybiBjbGFzc05hbWVzLmpvaW4oXCIgXCIpXG4gIH1cblxuICBjb2x1bW5Qcm9wcyhjb2x1bW4pIHtcbiAgICBjb25zdCBwcm9wcyA9IHt9XG5cbiAgICBpZiAoY29sdW1uLnRleHRDZW50ZXIpIHtcbiAgICAgIHByb3BzLnN0eWxlIHx8PSB7fVxuICAgICAgcHJvcHMuc3R5bGUudGV4dEFsaWduID0gXCJjZW50ZXJcIlxuICAgIH1cblxuICAgIGlmIChjb2x1bW4udGV4dFJpZ2h0KSB7XG4gICAgICBwcm9wcy5zdHlsZSB8fD0ge31cbiAgICAgIHByb3BzLnN0eWxlLnRleHRBbGlnbiA9IFwicmlnaHRcIlxuICAgIH1cblxuICAgIHJldHVybiBwcm9wc1xuICB9XG5cbiAgaGVhZGVyUHJvcHMoY29sdW1uKSB7XG4gICAgY29uc3QgcHJvcHMgPSB7fVxuXG4gICAgaWYgKGNvbHVtbi50ZXh0Q2VudGVyKSB7XG4gICAgICBwcm9wcy5zdHlsZSB8fD0ge31cbiAgICAgIHByb3BzLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gXCJjZW50ZXJcIlxuICAgIH1cblxuICAgIGlmIChjb2x1bW4udGV4dFJpZ2h0KSB7XG4gICAgICBwcm9wcy5zdHlsZSB8fD0ge31cbiAgICAgIHByb3BzLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gXCJlbmRcIlxuICAgIH1cblxuICAgIHJldHVybiBwcm9wc1xuICB9XG5cbiAgY29sdW1uV2lkdGhzKCkge1xuICAgIGNvbnN0IGNvbHVtbldpZHRocyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0aGlzLnMucHJlcGFyZWRDb2x1bW5zKSB7XG4gICAgICBjb2x1bW5XaWR0aHNbY29sdW1uLnRhYmxlU2V0dGluZ0NvbHVtbi5pZGVudGlmaWVyKCldID0gY29sdW1uLndpZHRoXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbHVtbldpZHRoc1xuICB9XG5cbiAgaGVhZGVyc0NvbnRlbnRGcm9tQ29sdW1ucyA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPERyYWdnYWJsZVNvcnRcbiAgICAgICAgZGF0YT17dGhpcy5zLmNvbHVtbnNUb1Nob3d9XG4gICAgICAgIGV2ZW50cz17dGhpcy50dC5kcmFnZ2FibGVTb3J0RXZlbnRzfVxuICAgICAgICBob3Jpem9udGFsXG4gICAgICAgIGtleUV4dHJhY3Rvcj17dGhpcy50dC5kcmFnTGlzdGtleUV4dHJhY3Rvcn1cbiAgICAgICAgb25JdGVtTW92ZWQ9e3RoaXMudHQub25JdGVtTW92ZWR9XG4gICAgICAgIG9uUmVvcmRlcmVkPXt0aGlzLnR0Lm9uUmVvcmRlcmVkfVxuICAgICAgICByZW5kZXJJdGVtPXt0aGlzLnR0LmRyYWdMaXN0UmVuZGVySXRlbUNvbnRlbnR9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIGRyYWdMaXN0Q2FjaGVLZXlFeHRyYWN0b3IgPSAoaXRlbSkgPT4gYCR7aXRlbS50YWJsZVNldHRpbmdDb2x1bW4uaWRlbnRpZmllcigpfS0ke3RoaXMucy5yZXNpemluZ31gXG4gIGRyYWdMaXN0a2V5RXh0cmFjdG9yID0gKGl0ZW0pID0+IGl0ZW0udGFibGVTZXR0aW5nQ29sdW1uLmlkZW50aWZpZXIoKVxuXG4gIG9uSXRlbU1vdmVkID0gKHthbmltYXRpb25BcmdzLCBpdGVtSW5kZXgsIHgsIHl9KSA9PiB7XG4gICAgY29uc3QgYW5pbWF0ZWRQb3NpdGlvbiA9IGRpZ2codGhpcywgXCJzXCIsIFwiY29sdW1uc1RvU2hvd1wiLCBpdGVtSW5kZXgsIFwiYW5pbWF0ZWRQb3NpdGlvblwiKVxuXG4gICAgaWYgKGFuaW1hdGlvbkFyZ3MpIHtcbiAgICAgIEFuaW1hdGVkLnRpbWluZyhhbmltYXRlZFBvc2l0aW9uLCBhbmltYXRpb25BcmdzKS5zdGFydCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFuaW1hdGVkUG9zaXRpb24uc2V0VmFsdWUoe3gsIHl9KVxuICAgIH1cbiAgfVxuXG4gIG9uUmVvcmRlcmVkID0gYXN5bmMgKHtmcm9tSXRlbSwgZnJvbVBvc2l0aW9uLCB0b0l0ZW0sIHRvUG9zaXRpb259KSA9PiB7XG4gICAgaWYgKGZyb21Qb3NpdGlvbiA9PSB0b1Bvc2l0aW9uKSByZXR1cm4gLy8gT25seSBkbyByZXF1ZXN0cyBhbmQgcXVlcmllcyBpZiBjaGFuZ2VkXG5cbiAgICBjb25zdCBUYWJsZVNldHRpbmdDb2x1bW4gPSBmcm9tSXRlbS50YWJsZVNldHRpbmdDb2x1bW4uY29uc3RydWN0b3JcbiAgICBjb25zdCB0b0NvbHVtbiA9IGF3YWl0IFRhYmxlU2V0dGluZ0NvbHVtbi5maW5kKHRvSXRlbS50YWJsZVNldHRpbmdDb2x1bW4uaWQoKSkgLy8gTmVlZCB0byBsb2FkIGxhdGVzdCBwb3NpdGlvbiBiZWNhdXNlIEFjdHNBc0xpc3QgbWlnaHQgaGF2ZSBjaGFuZ2VkIGl0XG5cbiAgICBhd2FpdCBmcm9tSXRlbS50YWJsZVNldHRpbmdDb2x1bW4udXBkYXRlKHtwb3NpdGlvbjogdG9Db2x1bW4ucG9zaXRpb24oKX0pXG4gIH1cblxuICBkcmFnTGlzdFJlbmRlckl0ZW1Db250ZW50ID0gKHtpc0FjdGl2ZSwgaXRlbSwgdG91Y2hQcm9wc30pID0+IHtcbiAgICBjb25zdCB7YW5pbWF0ZWRXaWR0aCwgYW5pbWF0ZWRaSW5kZXgsIGNvbHVtbiwgdGFibGVTZXR0aW5nQ29sdW1ufSA9IGl0ZW1cblxuICAgIHJldHVybiAoXG4gICAgICA8SGVhZGVyQ29sdW1uXG4gICAgICAgIGFjdGl2ZT17aXNBY3RpdmV9XG4gICAgICAgIGFuaW1hdGVkV2lkdGg9e2FuaW1hdGVkV2lkdGh9XG4gICAgICAgIGFuaW1hdGVkWkluZGV4PXthbmltYXRlZFpJbmRleH1cbiAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgIGtleT17dGFibGVTZXR0aW5nQ29sdW1uLmlkZW50aWZpZXIoKX1cbiAgICAgICAgcmVzaXppbmc9e3RoaXMucy5yZXNpemluZ31cbiAgICAgICAgdGFibGU9e3RoaXN9XG4gICAgICAgIHRhYmxlU2V0dGluZ0NvbHVtbj17dGFibGVTZXR0aW5nQ29sdW1ufVxuICAgICAgICB0b3VjaFByb3BzPXt0b3VjaFByb3BzfVxuICAgICAgICB3aWR0aHM9e3RoaXMucy53aWR0aHN9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIGhlYWRlckNsYXNzTmFtZUZvckNvbHVtbihjb2x1bW4pIHtcbiAgICBjb25zdCBjbGFzc05hbWVzID0gW11cblxuICAgIGlmIChjb2x1bW4uY29tbW9uUHJvcHMgJiYgY29sdW1uLmNvbW1vblByb3BzLmNsYXNzTmFtZSkgY2xhc3NOYW1lcy5wdXNoKGNvbHVtbi5jb21tb25Qcm9wcy5jbGFzc05hbWUpXG4gICAgaWYgKGNvbHVtbi5oZWFkZXJQcm9wcyAmJiBjb2x1bW4uaGVhZGVyUHJvcHMuY2xhc3NOYW1lKSBjbGFzc05hbWVzLnB1c2goY29sdW1uLmhlYWRlclByb3BzLmNsYXNzTmFtZSlcblxuICAgIHJldHVybiBjbGFzc05hbWVzXG4gIH1cblxuICBoZWFkZXJMYWJlbEZvckNvbHVtbihjb2x1bW4pIHtcbiAgICBjb25zdCB7bW9kZWxDbGFzc30gPSB0aGlzLnBcblxuICAgIGlmIChcImxhYmVsXCIgaW4gY29sdW1uKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbi5sYWJlbCA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5sYWJlbCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY29sdW1uLmxhYmVsXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGN1cnJlbnRNb2RlbENsYXNzID0gbW9kZWxDbGFzc1xuXG4gICAgLy8gQ2FsY3VsYXRlIGN1cnJlbnQgbW9kZWwgY2xhc3MgdGhyb3VnaCBwYXRoXG4gICAgaWYgKGNvbHVtbi5wYXRoKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhdGhQYXJ0IG9mIGNvbHVtbi5wYXRoKSB7XG4gICAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcHMgPSBkaWdnKGN1cnJlbnRNb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCksIFwicmVsYXRpb25zaGlwc1wiKVxuICAgICAgICBjb25zdCByZWxhdGlvbnNoaXAgPSByZWxhdGlvbnNoaXBzLmZpbmQoKHJlbGF0aW9uc2hpcEluQXJyYXkpID0+IHJlbGF0aW9uc2hpcEluQXJyYXkubmFtZSA9PSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUocGF0aFBhcnQpKVxuXG4gICAgICAgIGN1cnJlbnRNb2RlbENsYXNzID0gbW9kZWxDbGFzc1JlcXVpcmUoZGlnZyhyZWxhdGlvbnNoaXAsIFwicmVzb3VyY2VfbmFtZVwiKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29sdW1uLmF0dHJpYnV0ZSkgcmV0dXJuIGN1cnJlbnRNb2RlbENsYXNzLmh1bWFuQXR0cmlidXRlTmFtZShjb2x1bW4uYXR0cmlidXRlKVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gJ2xhYmVsJyBvciAnYXR0cmlidXRlJyB3YXMgZ2l2ZW5cIilcbiAgfVxuXG4gIG9uRmlsdGVyRm9ybVN1Ym1pdCA9ICgpID0+IHRoaXMuc3VibWl0RmlsdGVyKClcbiAgb25SZXF1ZXN0Q2xvc2VTZXR0aW5ncyA9ICgpID0+IHRoaXMuc2V0U3RhdGUoe3Nob3dTZXR0aW5nczogZmFsc2V9KVxuXG4gIG9uU2V0dGluZ3NDbGlja2VkID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcblxuICAgIHRoaXMuc2V0U3RhdGUoe3Nob3dTZXR0aW5nczogIXRoaXMucy5zaG93U2V0dGluZ3N9KVxuICB9XG5cbiAgc3VibWl0RmlsdGVyID0gKCkgPT4ge1xuICAgIGNvbnN0IGZpbHRlckZvcm0gPSBkaWdnKHRoaXMudHQuZmlsdGVyRm9ybVJlZiwgXCJjdXJyZW50XCIpXG4gICAgY29uc3Qge2FwcEhpc3Rvcnl9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHFQYXJhbXMgPSBQYXJhbXMuc2VyaWFsaXplRm9ybShmaWx0ZXJGb3JtKVxuICAgIGNvbnN0IHtxdWVyeVFOYW1lfSA9IHRoaXMuc1xuICAgIGNvbnN0IGNoYW5nZVBhcmFtc1BhcmFtcyA9IHt9XG5cbiAgICBjaGFuZ2VQYXJhbXNQYXJhbXNbcXVlcnlRTmFtZV0gPSBKU09OLnN0cmluZ2lmeShxUGFyYW1zKVxuXG4gICAgUGFyYW1zLmNoYW5nZVBhcmFtcyhjaGFuZ2VQYXJhbXNQYXJhbXMsIHthcHBIaXN0b3J5fSlcbiAgfVxuXG4gIHN1Ym1pdEZpbHRlckRlYm91bmNlID0gZGVib3VuY2UodGhpcy50dC5zdWJtaXRGaWx0ZXIpXG59KSlcbiJdLCJtYXBwaW5ncyI6IjtBQUFBLFNBQVFBLElBQUksRUFBRUMsSUFBSSxRQUFPLFdBQVc7QUFDcEMsT0FBT0MsS0FBSyxJQUFHQyxhQUFhLEVBQUVDLFVBQVUsRUFBRUMsT0FBTyxFQUFFQyxNQUFNLFFBQU8sT0FBTztBQUN2RSxTQUFRQyxRQUFRLEVBQUVDLFNBQVMsRUFBRUMsSUFBSSxRQUFPLGNBQWM7QUFDdEQsT0FBT0MsYUFBYSxNQUFNLG1CQUFtQjtBQUM3QyxPQUFPQyxJQUFJLE1BQU0sbUJBQW1CO0FBQ3BDLE9BQU9DLFVBQVUsTUFBTSxZQUFZO0FBQ25DLE9BQU9DLFVBQVUsTUFBTSxlQUFlO0FBQ3RDLE9BQU9DLGFBQWEsTUFBTSxrQkFBa0I7QUFDNUMsT0FBT0MsUUFBUSxNQUFNLFVBQVU7QUFDL0IsT0FBT0MsYUFBYSxNQUFNLHlCQUF5QjtBQUNuRCxPQUFPQyxZQUFZLE1BQU0sUUFBUTtBQUNqQyxPQUFPQyxPQUFPLE1BQU0sV0FBVztBQUMvQixPQUFPQyxRQUFRLE1BQU0sd0JBQXdCO0FBQzdDLE9BQU9DLGVBQWUsTUFBTSx1Q0FBdUM7QUFDbkUsU0FBUUMsSUFBSSxRQUFPLFNBQVM7QUFDNUIsT0FBT0MsTUFBTSxNQUFNLHFCQUFxQjtBQUN4QyxPQUFPQyxZQUFZLE1BQU0saUJBQWlCO0FBQzFDLE9BQU9DLFlBQVksTUFBTSxpQkFBaUI7QUFDMUMsT0FBTyxLQUFLQyxVQUFVLE1BQU0sWUFBWTtBQUN4QyxPQUFPQyxJQUFJLE1BQU0sNEJBQTRCO0FBQzdDLE9BQU9DLGlCQUFpQixNQUFNLHdCQUF3QjtBQUN0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
|
|
972
|
+
//# sourceMappingURL=table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","names":["digg","digs","React","createContext","useContext","useMemo","useRef","Animated","Pressable","View","BaseComponent","Card","classNames","Collection","columnVisible","debounce","DraggableSort","EventEmitter","Filters","FlatList","FontAwesomeIcon","Form","Header","HeaderColumn","HeaderSelect","inflection","memo","modelClassRequire","ModelRow","Paginate","Params","PropTypes","Row","selectCalculator","Select","Settings","shapeComponent","TableSettings","Text","uniqunize","useBreakpoint","useCollection","useI18n","useEventEmitter","useModelEvent","useQueryParams","Widths","paginationOptions","WorkerPluginsCheckAllCheckbox","lazy","TableContext","ListHeaderComponent","setup","useStates","lastUpdate","Date","render","mdUp","tableContextValue","table","collection","events","queryWithoutPagination","t","tt","query","onColumnVisibilityUpdated","createElement","dataSet","class","style","styleForRowHeader","p","workplace","s","currentWorkplace","styleForHeader","width","undefined","marginHorizontal","marginLeft","defaultValue","preparedColumns","Fragment","headersContentFromColumns","type","setState","ApiMakerTable","defaultProps","card","currentUser","destroyEnabled","filterCard","filterSubmitButton","noRecordsAvailableContent","noRecordsFoundContent","preloads","select","styleUI","propTypes","abilities","object","actionsContent","func","appHistory","bool","isRequired","className","string","instanceOf","columns","oneOfType","array","controls","defaultDateFormatName","defaultDateTimeFormatName","defaultParams","destroyMessage","editModelPath","filterContent","filterSubmitLabel","node","groupBy","header","identifier","modelClass","onModelsLoaded","paginateContent","paginationComponent","queryMethod","queryName","selectColumns","styles","viewModelPath","draggableSortEvents","tableSettings","namespace","name","breakpoint","queryParams","setInstance","filterFormRef","collectionKey","modelClassData","props","querySName","columnsAsArray","currentWorkplaceCount","filterForm","columnsToShow","draggedColumn","preload","queryQName","queryPageName","resizing","showFilters","Boolean","showSettings","tableSetting","tableSettingLoaded","tableSettingFullCacheKey","widths","cacheKey","loadCurrentWorkplace","then","loadCurrentWorkplaceCount","id","loadTableSetting","onLinksCreated","onLinksDestroyed","collectionReady","abilitiesToLoad","ifCondition","pagination","state","clone","except","onDragStart","onDragEndAnimation","getColumnsToShow","item","animatedZIndex","setValue","Workplace","result","current","WorkplaceLink","ransack","resource_type_eq","workplace_id_eq","count","filter","column","tableSettingColumn","sort","a","b","position","loadExistingOrCreateTableSettings","mergedPreloads","fullCacheKey","updateSettingsFullCacheKey","concat","models","overallCount","qParams","showNoRecordsAvailableContent","showNoRecordsFoundContent","args","Error","onLayout","onContainerLayout","container","cardOrTable","ownAbilities","push","length","modelClassName","modelName","ability","restProps","headerContent","PaginationComponent","human","flatListStyle","overflowX","border","borderRadius","flatList","Provider","value","_extends","data","extraData","keyExtractor","keyExtrator","renderItem","showsHorizontalScrollIndicator","tableControls","footer","tableFooter","e","nativeEvent","layout","tableWidth","created","amountCreated","prevState","destroyed","amountDestroyed","model","submitFilter","submitFilterDebounce","formRef","onSubmit","onFilterFormSubmit","setForm","setStates","onFilterChanged","onFilterChangedWithDelay","marginTop","onFilterClicked","preventDefault","onPerPageChanged","newPerPageValue","perKey","paramsChange","changeParams","index","columnWidths","key","styleForColumn","columnIndex","even","defaultStyle","justifyContent","padding","overflow","Object","assign","backgroundColor","flexDirection","alignItems","marginRight","borderRight","actualStyle","styleForHeaderText","fontWeight","styleForRow","flex","onPress","size","onRequestClose","onRequestCloseSettings","onSettingsClicked","currentPage","totalCount","perPage","to","Math","min","from","total_count","selected","onChange","options","join","columnProps","textCenter","textAlign","textRight","headerProps","horizontal","dragListkeyExtractor","onItemMoved","onReordered","dragListRenderItemContent","dragListCacheKeyExtractor","animationArgs","itemIndex","x","y","animatedPosition","timing","start","fromItem","fromPosition","toItem","toPosition","TableSettingColumn","constructor","toColumn","find","update","isActive","touchProps","animatedWidth","active","headerClassNameForColumn","commonProps","headerLabelForColumn","label","currentModelClass","path","pathPart","relationships","relationship","relationshipInArray","underscore","attribute","humanAttributeName","serializeForm","changeParamsParams","JSON","stringify"],"sources":["../../src/table/table.jsx"],"sourcesContent":["import {digg, digs} from \"diggerize\"\nimport React, {createContext, useContext, useMemo, useRef} from \"react\"\nimport {Animated, Pressable, View} from \"react-native\"\nimport BaseComponent from \"../base-component\"\nimport Card from \"../bootstrap/card\"\nimport classNames from \"classnames\"\nimport Collection from \"../collection\"\nimport columnVisible from \"./column-visible\"\nimport debounce from \"debounce\"\nimport DraggableSort from \"../draggable-sort/index\"\nimport EventEmitter from \"events\"\nimport Filters from \"./filters\"\nimport FlatList from \"./components/flat-list\"\nimport FontAwesomeIcon from \"react-native-vector-icons/FontAwesome\"\nimport {Form} from \"../form\"\nimport Header from \"./components/header\"\nimport HeaderColumn from \"./header-column\"\nimport HeaderSelect from \"./header-select\"\nimport * as inflection from \"inflection\"\nimport memo from \"set-state-compare/src/memo\"\nimport modelClassRequire from \"../model-class-require\"\nimport ModelRow from \"./model-row\"\nimport Paginate from \"../bootstrap/paginate\"\nimport Params from \"../params\"\nimport PropTypes from \"prop-types\"\nimport Row from \"./components/row\"\nimport selectCalculator from \"./select-calculator\"\nimport Select from \"../inputs/select\"\nimport Settings from \"./settings/index\"\nimport {shapeComponent} from \"set-state-compare/src/shape-component\"\nimport TableSettings from \"./table-settings\"\nimport Text from \"../utils/text\"\nimport uniqunize from \"uniqunize\"\nimport useBreakpoint from \"../use-breakpoint\"\nimport useCollection from \"../use-collection\"\nimport useI18n from \"i18n-on-steroids/src/use-i18n\"\nimport useEventEmitter from \"../use-event-emitter\"\nimport useModelEvent from \"../use-model-event\"\nimport useQueryParams from \"on-location-changed/src/use-query-params\"\nimport Widths from \"./widths\"\n\nconst paginationOptions = [30, 60, 90, [\"All\", \"all\"]]\nconst WorkerPluginsCheckAllCheckbox = React.lazy(() => import(\"./worker-plugins-check-all-checkbox\"))\nconst TableContext = createContext()\n\nconst ListHeaderComponent = memo(shapeComponent(class ListHeaderComponent extends BaseComponent {\n setup() {\n this.useStates({\n lastUpdate: new Date()\n })\n }\n\n render() {\n const {mdUp} = useBreakpoint()\n const tableContextValue = useContext(TableContext)\n const table = tableContextValue.table\n const {collection, events, queryWithoutPagination, t} = table.tt\n const {query} = digs(collection, \"query\")\n\n useEventEmitter(events, \"columnVisibilityUpdated\", this.tt.onColumnVisibilityUpdated)\n\n return (\n <Row dataSet={{class: \"api-maker/table/header-row\"}} style={table.styleForRowHeader()}>\n {table.p.workplace && table.s.currentWorkplace &&\n <Header style={table.styleForHeader({style: {width: mdUp ? 41 : undefined}})}>\n <WorkerPluginsCheckAllCheckbox\n currentWorkplace={table.s.currentWorkplace}\n query={queryWithoutPagination}\n style={{marginHorizontal: \"auto\"}}\n />\n {!mdUp &&\n <Text style={{marginLeft: 3}}>\n {t(\".select_all_found\", {defaultValue: \"Select all found\"})}\n </Text>\n }\n </Header>\n }\n {!mdUp &&\n <Header style={table.styleForHeader({style: {}})}>\n <HeaderSelect preparedColumns={table.s.preparedColumns} query={query} table={table} />\n </Header>\n }\n {mdUp &&\n <>\n {table.headersContentFromColumns()}\n <Header style={table.styleForHeader({style: {}, type: \"actions\"})} />\n </>\n }\n </Row>\n )\n }\n\n onColumnVisibilityUpdated = () => this.setState({lastUpdate: new Date()})\n}))\n\nexport default memo(shapeComponent(class ApiMakerTable extends BaseComponent {\n static defaultProps = {\n card: true,\n currentUser: null,\n destroyEnabled: true,\n filterCard: true,\n filterSubmitButton: true,\n noRecordsAvailableContent: undefined,\n noRecordsFoundContent: undefined,\n preloads: [],\n select: {},\n styleUI: true,\n workplace: false\n }\n\n static propTypes = {\n abilities: PropTypes.object,\n actionsContent: PropTypes.func,\n appHistory: PropTypes.object,\n card: PropTypes.bool.isRequired,\n className: PropTypes.string,\n collection: PropTypes.instanceOf(Collection),\n columns: PropTypes.oneOfType([PropTypes.array, PropTypes.func]),\n controls: PropTypes.func,\n currentUser: PropTypes.object,\n defaultDateFormatName: PropTypes.string,\n defaultDateTimeFormatName: PropTypes.string,\n defaultParams: PropTypes.object,\n destroyEnabled: PropTypes.bool.isRequired,\n destroyMessage: PropTypes.string,\n editModelPath: PropTypes.func,\n filterCard: PropTypes.bool.isRequired,\n filterContent: PropTypes.func,\n filterSubmitLabel: PropTypes.node,\n groupBy: PropTypes.array,\n header: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n identifier: PropTypes.string,\n modelClass: PropTypes.func.isRequired,\n noRecordsAvailableContent: PropTypes.func,\n noRecordsFoundContent: PropTypes.func,\n onModelsLoaded: PropTypes.func,\n paginateContent: PropTypes.func,\n paginationComponent: PropTypes.func,\n preloads: PropTypes.array.isRequired,\n queryMethod: PropTypes.func,\n queryName: PropTypes.string,\n select: PropTypes.object,\n selectColumns: PropTypes.object,\n styles: PropTypes.object,\n styleUI: PropTypes.bool.isRequired,\n viewModelPath: PropTypes.func,\n workplace: PropTypes.bool.isRequired\n }\n\n draggableSortEvents = new EventEmitter()\n events = new EventEmitter()\n tableSettings = null\n\n setup() {\n const {t} = useI18n({namespace: \"js.api_maker.table\"})\n const {name: breakpoint, mdUp} = useBreakpoint()\n const queryParams = useQueryParams()\n\n this.setInstance({\n breakpoint,\n filterFormRef: useRef(),\n mdUp,\n t\n })\n\n const collectionKey = digg(this.p.modelClass.modelClassData(), \"collectionKey\")\n let queryName = this.props.queryName\n\n if (!queryName) queryName = collectionKey\n\n const querySName = `${queryName}_s`\n\n this.useStates({\n columns: () => this.columnsAsArray(),\n currentWorkplace: undefined,\n currentWorkplaceCount: null,\n filterForm: null,\n columnsToShow: null,\n draggedColumn: null,\n identifier: () => this.props.identifier || `${collectionKey}-default`,\n lastUpdate: () => new Date(),\n preload: undefined,\n preparedColumns: undefined,\n queryName,\n queryQName: () => `${queryName}_q`,\n queryPageName: () => `${queryName}_page`,\n querySName,\n resizing: false,\n showFilters: () => Boolean(queryParams[querySName]),\n showSettings: false,\n tableSetting: undefined,\n tableSettingLoaded: false,\n tableSettingFullCacheKey: undefined,\n width: undefined,\n widths: null\n })\n\n this.tableContextValue = useMemo(\n () => ({\n cacheKey: this.s.tableSettingFullCacheKey,\n lastUpdate: this.s.lastUpdate,\n resizing: this.s.resizing,\n table: this\n }),\n [this.s.lastUpdate, this.s.resizing, this.s.tableSettingFullCacheKey]\n )\n\n useMemo(() => {\n if (this.props.workplace) {\n this.loadCurrentWorkplace().then(() => {\n this.loadCurrentWorkplaceCount()\n })\n }\n }, [this.p.currentUser?.id()])\n\n useMemo(() => {\n if (!this.tt.tableSettings && this.s.width) {\n this.loadTableSetting()\n }\n }, [this.p.currentUser?.id(), this.s.width])\n\n useModelEvent(this.s.currentWorkplace, \"workplace_links_created\", this.tt.onLinksCreated)\n useModelEvent(this.s.currentWorkplace, \"workplace_links_destroyed\", this.tt.onLinksDestroyed)\n\n let collectionReady = true\n let select\n\n if (!this.s.preparedColumns) {\n collectionReady = false\n }\n\n if (collectionReady) {\n select = selectCalculator({table: this})\n }\n\n this.collection = useCollection({\n abilities: this.abilitiesToLoad(),\n defaultParams: this.props.defaultParams,\n collection: this.props.collection,\n groupBy: this.props.groupBy,\n ifCondition: collectionReady,\n modelClass: this.props.modelClass,\n onModelsLoaded: this.props.onModelsLoaded,\n noRecordsAvailableContent: this.props.noRecordsAvailableContent,\n noRecordsFoundContent: this.props.noRecordsFoundContent,\n pagination: true,\n preloads: this.state.preload,\n queryMethod: this.props.queryMethod,\n queryName,\n select,\n selectColumns: this.props.selectColumns\n })\n this.queryWithoutPagination = useMemo(\n () => this.collection?.query?.clone()?.except(\"page\"),\n [this.collection.query]\n )\n\n useEventEmitter(this.tt.draggableSortEvents, \"onDragStart\", this.tt.onDragStart)\n useEventEmitter(this.tt.draggableSortEvents, \"onDragEndAnimation\", this.tt.onDragEndAnimation)\n useEventEmitter(this.tt.events, \"columnVisibilityUpdated\", this.tt.onColumnVisibilityUpdated)\n }\n\n onColumnVisibilityUpdated = () => this.setState({columnsToShow: this.getColumnsToShow(this.s.columns), lastUpdate: new Date()})\n onDragStart = ({item}) => item.animatedZIndex.setValue(9999)\n onDragEndAnimation = ({item}) => item.animatedZIndex.setValue(0)\n\n async loadCurrentWorkplace() {\n const Workplace = modelClassRequire(\"Workplace\")\n const result = await Workplace.current()\n const currentWorkplace = digg(result, \"current\", 0)\n\n this.setState({currentWorkplace})\n }\n\n async loadCurrentWorkplaceCount() {\n const WorkplaceLink = modelClassRequire(\"WorkplaceLink\")\n const currentWorkplaceCount = await WorkplaceLink\n .ransack({\n resource_type_eq: this.p.modelClass.modelClassData().name,\n workplace_id_eq: this.s.currentWorkplace.id()\n })\n .count()\n\n this.setState({currentWorkplaceCount})\n }\n\n getColumnsToShow(columns) {\n return columns\n .filter(({column, tableSettingColumn}) => columnVisible(column, tableSettingColumn))\n .sort((a, b) => a.tableSettingColumn.position() - b.tableSettingColumn.position())\n }\n\n async loadTableSetting() {\n this.tableSettings = new TableSettings({table: this})\n\n const tableSetting = await this.tableSettings.loadExistingOrCreateTableSettings()\n const {columns, preload} = this.tableSettings.preparedColumns(tableSetting)\n const {width} = this.s\n const widths = new Widths({columns, table: this, width})\n const columnsToShow = this.getColumnsToShow(columns)\n\n this.setState({\n columns,\n columnsToShow,\n preparedColumns: columns,\n preload: this.mergedPreloads(preload),\n tableSetting,\n tableSettingLoaded: true,\n tableSettingFullCacheKey: tableSetting.fullCacheKey(),\n widths\n })\n }\n\n updateSettingsFullCacheKey = () => this.setState({tableSettingFullCacheKey: this.state.tableSetting.fullCacheKey()})\n\n columnsAsArray = () => {\n if (typeof this.props.columns == \"function\") {\n return this.props.columns()\n }\n\n return this.props.columns\n }\n\n mergedPreloads(preload) {\n const {preloads} = this.props\n let mergedPreloads = []\n\n if (preloads) mergedPreloads = mergedPreloads.concat(preloads)\n if (preload) mergedPreloads = mergedPreloads.concat(preload)\n\n return uniqunize(mergedPreloads)\n }\n\n render () {\n const {modelClass, noRecordsAvailableContent, noRecordsFoundContent} = this.p\n const {collection, currentUser} = this.props\n const {queryName, querySName, showFilters} = this.s\n const {\n models,\n overallCount,\n qParams,\n query,\n result,\n showNoRecordsAvailableContent,\n showNoRecordsFoundContent\n } = digs(\n this.collection,\n \"models\",\n \"overallCount\",\n \"qParams\",\n \"query\",\n \"result\",\n \"showNoRecordsAvailableContent\",\n \"showNoRecordsFoundContent\"\n )\n\n if (collection && collection.args.modelClass.modelClassData().name != modelClass.modelClassData().name) {\n throw new Error(\n `Model class from collection '${collection.args.modelClass.modelClassData().name}' ` +\n `didn't match model class on table: '${modelClass.modelClassData().name}'`\n )\n }\n\n return (\n <View dataSet={{class: this.className()}} onLayout={this.tt.onContainerLayout} style={this.props.styles?.container}>\n {showNoRecordsAvailableContent &&\n <div className=\"live-table--no-records-available-content\">\n {noRecordsAvailableContent({models, qParams, overallCount})}\n </div>\n }\n {showNoRecordsFoundContent &&\n <div className=\"live-table--no-records-found-content\">\n {noRecordsFoundContent({models, qParams, overallCount})}\n </div>\n }\n {showFilters &&\n <Filters currentUser={currentUser} modelClass={modelClass} queryName={queryName} querySName={querySName} />\n }\n {qParams && query && result && models && !showNoRecordsAvailableContent && !showNoRecordsFoundContent &&\n this.cardOrTable()\n }\n </View>\n )\n }\n\n abilitiesToLoad () {\n const abilitiesToLoad = {}\n const {abilities, modelClass} = this.props\n const ownAbilities = []\n\n if (this.props.destroyEnabled) ownAbilities.push(\"destroy\")\n if (this.props.editModelPath) ownAbilities.push(\"edit\")\n if (this.props.viewModelPath) ownAbilities.push(\"show\")\n\n if (ownAbilities.length > 0) {\n const modelClassName = digg(modelClass.modelClassData(), \"name\")\n\n abilitiesToLoad[modelClassName] = ownAbilities\n }\n\n if (abilities) {\n for (const modelName in abilities) {\n if (!(modelName in abilitiesToLoad)) {\n abilitiesToLoad[modelName] = []\n }\n\n for (const ability of abilities[modelName]) {\n abilitiesToLoad[modelName].push(ability)\n }\n }\n }\n\n return abilitiesToLoad\n }\n\n cardOrTable () {\n const {\n abilities,\n actionsContent,\n appHistory,\n card,\n className,\n collection,\n columns,\n controls,\n currentUser,\n defaultDateFormatName,\n defaultDateTimeFormatName,\n defaultParams,\n destroyEnabled,\n destroyMessage,\n editModelPath,\n filterCard,\n filterContent,\n filterSubmitButton,\n filterSubmitLabel,\n groupBy,\n header,\n identifier,\n modelClass,\n noRecordsAvailableContent,\n noRecordsFoundContent,\n onModelsLoaded,\n paginateContent,\n paginationComponent,\n preloads,\n queryMethod,\n queryName,\n select,\n selectColumns,\n styleUI,\n viewModelPath,\n workplace,\n ...restProps\n } = this.props\n const {models, qParams, query, result} = digs(this.collection, \"models\", \"qParams\", \"query\", \"result\")\n\n let headerContent, PaginationComponent\n\n if (typeof header == \"function\") {\n headerContent = header({models, qParams, query, result})\n } else if (header) {\n headerContent = header\n } else {\n headerContent = modelClass.modelName().human({count: 2})\n }\n\n if (!paginateContent) {\n if (paginationComponent) {\n PaginationComponent = paginationComponent\n } else {\n PaginationComponent = Paginate\n }\n }\n\n const flatListStyle = {\n overflowX: \"auto\"\n }\n\n if (styleUI) {\n flatListStyle.border = \"1px solid #dbdbdb\"\n flatListStyle.borderRadius = 5\n }\n\n const flatList = (\n <TableContext.Provider value={this.tt.tableContextValue}>\n <FlatList\n data={models}\n dataSet={{\n class: classNames(\"api-maker--table\", className),\n cacheKey: this.s.tableSettingFullCacheKey,\n lastUpdate: this.s.lastUpdate\n }}\n extraData={this.s.lastUpdate}\n keyExtractor={this.tt.keyExtrator}\n ListHeaderComponent={ListHeaderComponent}\n renderItem={this.tt.renderItem}\n showsHorizontalScrollIndicator\n style={flatListStyle}\n {...restProps}\n />\n </TableContext.Provider>\n )\n\n return (\n <>\n {filterContent && filterCard &&\n <Card className=\"live-table--filter-card mb-4\">\n {this.filterForm()}\n </Card>\n }\n {filterContent && !filterCard &&\n this.filterForm()\n }\n {card &&\n <Card\n className={classNames(\"live-table--table-card\", \"mb-4\", className)}\n controls={this.tableControls()}\n header={headerContent}\n footer={this.tableFooter()}\n {...restProps}\n >\n {flatList}\n </Card>\n }\n {!card && flatList}\n {result && PaginationComponent &&\n <PaginationComponent result={result} />\n }\n {result && paginateContent &&\n paginateContent({result})\n }\n </>\n )\n }\n\n onContainerLayout = (e) => {\n const {width} = e.nativeEvent.layout\n const {widths} = this.s\n\n this.setState({width})\n if (widths) widths.tableWidth = width\n }\n\n onLinksCreated = ({args}) => {\n const modelClassName = this.p.modelClass.modelClassData().name\n\n if (args.created[modelClassName]) {\n const amountCreated = args.created[modelClassName].length\n\n this.setState((prevState) => ({\n currentWorkplaceCount: prevState.currentWorkplaceCount + amountCreated\n }))\n }\n }\n\n onLinksDestroyed = ({args}) => {\n const modelClassName = this.p.modelClass.modelClassData().name\n\n if (args.destroyed[modelClassName]) {\n const amountDestroyed = args.destroyed[modelClassName].length\n\n this.setState((prevState) => ({\n currentWorkplaceCount: prevState.currentWorkplaceCount - amountDestroyed\n }))\n }\n }\n\n keyExtrator = (model) => `${this.s.tableSettingFullCacheKey}-${model.id()}`\n\n filterForm = () => {\n const {filterFormRef, submitFilter, submitFilterDebounce} = this.tt\n const {filterContent, filterSubmitButton} = this.p\n const {queryQName} = this.s\n const {filterSubmitLabel} = this.props\n const {qParams} = digs(this.collection, \"qParams\")\n\n return (\n <Form className=\"live-table--filter-form\" formRef={filterFormRef} onSubmit={this.tt.onFilterFormSubmit} setForm={this.setStates.filterForm}>\n {\"s\" in qParams &&\n <input name=\"s\" type=\"hidden\" value={qParams.s} />\n }\n {filterContent({\n onFilterChanged: submitFilter,\n onFilterChangedWithDelay: submitFilterDebounce,\n qParams,\n queryQName\n })}\n {filterSubmitButton &&\n <input\n className=\"btn btn-primary live-table--submit-filter-button\"\n type=\"submit\"\n style={{marginTop: \"8px\"}}\n value={filterSubmitLabel || this.t(\".filter\", {defaultValue: \"Filter\"})}\n />\n }\n </Form>\n )\n }\n\n onFilterClicked = (e) => {\n e.preventDefault()\n this.setState({showFilters: !this.state.showFilters})\n }\n\n onPerPageChanged = (e) => {\n const {queryName} = this.s\n const newPerPageValue = digg(e, \"target\", \"value\")\n const perKey = `${queryName}_per`\n const paramsChange = {}\n\n paramsChange[perKey] = newPerPageValue\n\n Params.changeParams(paramsChange)\n }\n\n renderItem = ({index, item: model}) => {\n if (!this.s.tableSettingLoaded) {\n return (\n <View>\n <Text>\n {this.t(\".loading_dot_dot_dot\", {defaultValue: \"Loading...\"})}\n </Text>\n </View>\n )\n }\n\n return (\n <ModelRow\n cacheKey={model.cacheKey()}\n columns={this.s.columnsToShow}\n columnWidths={this.columnWidths()}\n events={this.tt.events}\n index={index}\n key={model.id()}\n model={model}\n table={this}\n tableSettingFullCacheKey={this.s.tableSettingFullCacheKey}\n />\n )\n }\n\n styleForColumn = ({column, columnIndex, even, style, type}) => {\n const {styleUI} = this.p\n const defaultStyle = {\n justifyContent: \"center\",\n padding: 8,\n overflow: \"hidden\"\n }\n\n if (styleUI) {\n Object.assign(defaultStyle, {\n backgroundColor: even ? \"#f5f5f5\" : \"#fff\"\n })\n }\n\n if (type == \"actions\") {\n defaultStyle.flexDirection = \"row\"\n defaultStyle.alignItems = \"center\"\n\n if (this.tt.mdUp) {\n defaultStyle.marginLeft = \"auto\"\n } else {\n defaultStyle.marginRight = \"auto\"\n }\n } else if (this.tt.mdUp && styleUI) {\n defaultStyle.borderRight = \"1px solid #dbdbdb\"\n }\n\n const actualStyle = Object.assign(\n defaultStyle,\n style\n )\n\n return actualStyle\n }\n\n styleForHeader = ({column, columnIndex, style, type}) => {\n const {mdUp} = this.tt\n const defaultStyle = {\n flexDirection: \"row\",\n alignItems: \"center\",\n padding: 8\n }\n\n if (type != \"actions\" && mdUp && this.p.styleUI) {\n defaultStyle.borderRight = \"1px solid #dbdbdb\"\n }\n\n const actualStyle = Object.assign(\n defaultStyle,\n style\n )\n\n return actualStyle\n }\n\n styleForHeaderText() {\n const actualStyle = {fontWeight: \"bold\"}\n\n return actualStyle\n }\n\n styleForRow = ({even} = {}) => {\n const actualStyle = {\n flex: 1,\n alignItems: \"stretch\"\n }\n\n if (even && this.p.styleUI) {\n actualStyle.backgroundColor = \"#f5f5f5\"\n }\n\n return actualStyle\n }\n\n styleForRowHeader = () => {\n const actualStyle = {\n flex: 1,\n alignItems: \"stretch\"\n }\n\n return actualStyle\n }\n\n tableControls() {\n const {controls} = this.props\n const {showSettings} = this.s\n const {models, qParams, query, result} = digs(this.collection, \"models\", \"qParams\", \"query\", \"result\")\n\n return (\n <View style={{flexDirection: \"row\"}}>\n {controls && controls({models, qParams, query, result})}\n <Pressable dataSet={{class: \"filter-button\"}} onPress={this.tt.onFilterClicked}>\n <FontAwesomeIcon name=\"search\" size={20} />\n </Pressable>\n <View style={{position: \"relative\"}}>\n {showSettings &&\n <Settings onRequestClose={this.tt.onRequestCloseSettings} table={this} />\n }\n <Pressable dataSet={{class: \"settings-button\"}} onPress={this.tt.onSettingsClicked}>\n <FontAwesomeIcon name=\"gear\" size={20} />\n </Pressable>\n </View>\n </View>\n )\n }\n\n tableFooter() {\n const {result} = digs(this.collection, \"result\")\n const currentPage = result.currentPage()\n const totalCount = result.totalCount()\n const perPage = result.perPage()\n const to = Math.min(currentPage * perPage, totalCount)\n const defaultValue = \"Showing %{from} to %{to} out of %{total_count} total.\"\n let from = ((currentPage - 1) * perPage) + 1\n\n if (to === 0) from = 0\n\n return (\n <View style={{flexDirection: \"row\", justifyContent: \"space-between\", marginTop: 10}}>\n <View dataSet={{class: \"showing-counts\"}} style={{flexDirection: \"row\"}}>\n <Text>\n {this.t(\".showing_from_to_out_of_total\", {defaultValue, from, to, total_count: totalCount})}\n </Text>\n {this.p.workplace && this.s.currentWorkplaceCount !== null &&\n <Text style={{marginLeft: 3}}>\n {this.t(\".x_selected\", {defaultValue: \"%{selected} selected.\", selected: this.s.currentWorkplaceCount})}\n </Text>\n }\n </View>\n <View>\n <Select\n className=\"per-page-select\"\n defaultValue={perPage}\n onChange={this.tt.onPerPageChanged}\n options={paginationOptions}\n />\n </View>\n </View>\n )\n }\n\n className() {\n const classNames = [\"api-maker--table\"]\n\n if (this.props.className) {\n classNames.push(this.props.className)\n }\n\n return classNames.join(\" \")\n }\n\n columnProps(column) {\n const props = {}\n\n if (column.textCenter) {\n props.style ||= {}\n props.style.textAlign = \"center\"\n }\n\n if (column.textRight) {\n props.style ||= {}\n props.style.textAlign = \"right\"\n }\n\n return props\n }\n\n headerProps(column) {\n const props = {}\n\n if (column.textCenter) {\n props.style ||= {}\n props.style.justifyContent = \"center\"\n }\n\n if (column.textRight) {\n props.style ||= {}\n props.style.justifyContent = \"end\"\n }\n\n return props\n }\n\n columnWidths() {\n const columnWidths = {}\n\n for (const column of this.s.preparedColumns) {\n columnWidths[column.tableSettingColumn.identifier()] = column.width\n }\n\n return columnWidths\n }\n\n headersContentFromColumns = () => {\n return (\n <DraggableSort\n data={this.s.columnsToShow}\n events={this.tt.draggableSortEvents}\n horizontal\n keyExtractor={this.tt.dragListkeyExtractor}\n onItemMoved={this.tt.onItemMoved}\n onReordered={this.tt.onReordered}\n renderItem={this.tt.dragListRenderItemContent}\n />\n )\n }\n\n dragListCacheKeyExtractor = (item) => `${item.tableSettingColumn.identifier()}-${this.s.resizing}`\n dragListkeyExtractor = (item) => item.tableSettingColumn.identifier()\n\n onItemMoved = ({animationArgs, itemIndex, x, y}) => {\n const animatedPosition = digg(this, \"s\", \"columnsToShow\", itemIndex, \"animatedPosition\")\n\n if (animationArgs) {\n Animated.timing(animatedPosition, animationArgs).start()\n } else {\n animatedPosition.setValue({x, y})\n }\n }\n\n onReordered = async ({fromItem, fromPosition, toItem, toPosition}) => {\n if (fromPosition == toPosition) return // Only do requests and queries if changed\n\n const TableSettingColumn = fromItem.tableSettingColumn.constructor\n const toColumn = await TableSettingColumn.find(toItem.tableSettingColumn.id()) // Need to load latest position because ActsAsList might have changed it\n\n await fromItem.tableSettingColumn.update({position: toColumn.position()})\n }\n\n dragListRenderItemContent = ({isActive, item, touchProps}) => {\n const {animatedWidth, animatedZIndex, column, tableSettingColumn} = item\n\n return (\n <HeaderColumn\n active={isActive}\n animatedWidth={animatedWidth}\n animatedZIndex={animatedZIndex}\n column={column}\n key={tableSettingColumn.identifier()}\n resizing={this.s.resizing}\n table={this}\n tableSettingColumn={tableSettingColumn}\n touchProps={touchProps}\n widths={this.s.widths}\n />\n )\n }\n\n headerClassNameForColumn(column) {\n const classNames = []\n\n if (column.commonProps && column.commonProps.className) classNames.push(column.commonProps.className)\n if (column.headerProps && column.headerProps.className) classNames.push(column.headerProps.className)\n\n return classNames\n }\n\n headerLabelForColumn(column) {\n const {modelClass} = this.p\n\n if (\"label\" in column) {\n if (typeof column.label == \"function\") {\n return column.label()\n } else {\n return column.label\n }\n }\n\n let currentModelClass = modelClass\n\n // Calculate current model class through path\n if (column.path) {\n for (const pathPart of column.path) {\n const relationships = digg(currentModelClass.modelClassData(), \"relationships\")\n const relationship = relationships.find((relationshipInArray) => relationshipInArray.name == inflection.underscore(pathPart))\n\n currentModelClass = modelClassRequire(digg(relationship, \"resource_name\"))\n }\n }\n\n if (column.attribute) return currentModelClass.humanAttributeName(column.attribute)\n\n throw new Error(\"No 'label' or 'attribute' was given\")\n }\n\n onFilterFormSubmit = () => this.submitFilter()\n onRequestCloseSettings = () => this.setState({showSettings: false})\n\n onSettingsClicked = (e) => {\n e.preventDefault()\n\n this.setState({showSettings: !this.s.showSettings})\n }\n\n submitFilter = () => {\n const filterForm = digg(this.tt.filterFormRef, \"current\")\n const {appHistory} = this.props\n const qParams = Params.serializeForm(filterForm)\n const {queryQName} = this.s\n const changeParamsParams = {}\n\n changeParamsParams[queryQName] = JSON.stringify(qParams)\n\n Params.changeParams(changeParamsParams, {appHistory})\n }\n\n submitFilterDebounce = debounce(this.tt.submitFilter)\n}))\n"],"mappings":"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","ignoreList":[]}
|