diff --git a/components/resources/resources-dashboard/src/main/resources/META-INF/dirigible/dashboard/translations/bg-BG/common.json b/components/resources/resources-dashboard/src/main/resources/META-INF/dirigible/dashboard/translations/bg-BG/common.json index 51d3126d6be..54ffacdc6e5 100644 --- a/components/resources/resources-dashboard/src/main/resources/META-INF/dirigible/dashboard/translations/bg-BG/common.json +++ b/components/resources/resources-dashboard/src/main/resources/META-INF/dirigible/dashboard/translations/bg-BG/common.json @@ -31,6 +31,7 @@ "yes": "Да", "no": "Не", "ok": "Добре", + "select": "Избери", "cancel": "Отказ", "add": "Добави", "edit": "Редактирай", diff --git a/components/resources/resources-documents/src/main/resources/META-INF/dirigible/documents/configs/documents.js b/components/resources/resources-documents/src/main/resources/META-INF/dirigible/documents/configs/documents.js index ff3d9b66e23..bfc9c81c7bf 100644 --- a/components/resources/resources-documents/src/main/resources/META-INF/dirigible/documents/configs/documents.js +++ b/components/resources/resources-documents/src/main/resources/META-INF/dirigible/documents/configs/documents.js @@ -20,6 +20,13 @@ const perspectiveData = { lazyLoad: true, icon: '/services/web/documents/images/documents.svg', }; +const viewData = { + region: 'center', + hasHeader: false, + maxWidth: '640px', + ...perspectiveData +}; if (typeof exports !== 'undefined') { exports.getPerspective = () => perspectiveData; + exports.getView = () => viewData; } \ No newline at end of file diff --git a/components/resources/resources-documents/src/main/resources/META-INF/dirigible/documents/extensions/window-documents.extension b/components/resources/resources-documents/src/main/resources/META-INF/dirigible/documents/extensions/window-documents.extension new file mode 100644 index 00000000000..8c63a035359 --- /dev/null +++ b/components/resources/resources-documents/src/main/resources/META-INF/dirigible/documents/extensions/window-documents.extension @@ -0,0 +1,5 @@ +{ + "module": "documents/configs/documents.js", + "extensionPoint": "application-windows", + "description": "Documents Window" +} \ No newline at end of file diff --git a/components/resources/resources-documents/src/main/resources/META-INF/dirigible/documents/index.html b/components/resources/resources-documents/src/main/resources/META-INF/dirigible/documents/index.html index fc0751635cc..8753ccc216f 100644 --- a/components/resources/resources-documents/src/main/resources/META-INF/dirigible/documents/index.html +++ b/components/resources/resources-documents/src/main/resources/META-INF/dirigible/documents/index.html @@ -43,14 +43,15 @@ - - - - - + + + + + - + @@ -85,7 +86,7 @@ - @@ -94,7 +95,7 @@ - @@ -104,7 +105,7 @@ {{ single.name }} -
+
+ + @@ -127,14 +128,14 @@
-
+
{{'documents:dropFiles' | t:'Drop files here'}}
- +
@@ -158,6 +159,16 @@ + + + + + + + + + + diff --git a/components/resources/resources-documents/src/main/resources/META-INF/dirigible/documents/js/documents.js b/components/resources/resources-documents/src/main/resources/META-INF/dirigible/documents/js/documents.js index 9d51633f041..0ad53414128 100644 --- a/components/resources/resources-documents/src/main/resources/META-INF/dirigible/documents/js/documents.js +++ b/components/resources/resources-documents/src/main/resources/META-INF/dirigible/documents/js/documents.js @@ -50,7 +50,7 @@ class HistoryStack { this.history.idx++; } } -documents.controller('DocumentsController', ($scope, $http, $timeout, $element, $document, ButtonStates, FileUploader, LocaleService) => { +documents.controller('DocumentsController', ($scope, $http, $timeout, $element, $document, ButtonStates, FileUploader, LocaleService, ViewParameters) => { const dialogHub = new DialogHub(); const notificationHub = new NotificationHub(); const statusBarHub = new StatusBarHub(); @@ -74,19 +74,27 @@ documents.controller('DocumentsController', ($scope, $http, $timeout, $element, let iframe; - angular.element($document[0]).ready(() => { - iframe = $document[0].getElementById('preview-iframe'); - iframe.onload = () => $scope.$evalAsync(() => { - $scope.previewLoading = false; - }); - iframe.onerror = () => $scope.$evalAsync(() => { - console.error(`Error while loading preview for ${$scope.selectedFile.name}`); - $scope.previewLoading = false; + $scope.params = { + multiple: true, + readOnly: false, + ...ViewParameters.get() + }; + + if ($scope.params.container !== 'window') { + angular.element($document[0]).ready(() => { + iframe = $document[0].getElementById('preview-iframe'); + iframe.onload = () => $scope.$evalAsync(() => { + $scope.previewLoading = false; + }); + iframe.onerror = () => $scope.$evalAsync(() => { + console.error(`Error while loading preview for ${$scope.selectedFile.name}`); + $scope.previewLoading = false; + }); }); - }); + } $scope.loading = false; - $scope.canPreview = true; + $scope.canPreview = $scope.params.container !== 'window'; $scope.previewType = 'web'; $scope.csvData = { headers: [], @@ -147,6 +155,30 @@ documents.controller('DocumentsController', ($scope, $http, $timeout, $element, $scope.goBack = () => $scope.history.goBack(path => loadFolder(path)); $scope.goForward = () => $scope.history.goForward(path => loadFolder(path)); + function getAllSelectedFilePaths() { + let paths = []; + for (let i = 0; i < $scope.folder.children.length; i++) { + if ($scope.folder.children[i].selected) { + paths.push($scope.folder.children[i].path); + } + } + return paths; + }; + + $scope.closeDialog = (sendSelected = true) => { + if ($scope.params.topic) { + if (sendSelected) { + dialogHub.postMessage({ + topic: $scope.params.topic, + data: $scope.params.multiple ? getAllSelectedFilePaths() : [$scope.selectedFile['path']] + }); + } else { + dialogHub.triggerEvent($scope.params.topic); + } + } + dialogHub.closeWindow({ id: viewData.id }); + }; + $scope.getFullPath = (itemName) => { const path = $scope.folder.path ? ($scope.folder.path + '/' + itemName) : itemName; return path.replace(/\/\//g, '/'); @@ -167,6 +199,7 @@ documents.controller('DocumentsController', ($scope, $http, $timeout, $element, if ($scope.isFolder(cmisObject)) { openFolder($scope.getFullPath(cmisObject.name)); } else { + $scope.clearSelection(); setSelectedFile(cmisObject); } }; @@ -518,9 +551,13 @@ documents.controller('DocumentsController', ($scope, $http, $timeout, $element, function setSelectedFile(selectedFile) { if (selectedFile === null) $scope.selectedFile = selectedFile; - else if ($scope.canPreviewFile(selectedFile.name)) { + else { $scope.selectedFile = selectedFile; - setPreviewer(); + if ($scope.params.container === 'window') { + $scope.selectedFile.selected = true; + } else if ($scope.canPreviewFile(selectedFile.name)) { + setPreviewer(); + } } }; diff --git a/components/resources/resources-locale/src/main/resources/META-INF/dirigible/resources-locale/translations/en-US/common.json b/components/resources/resources-locale/src/main/resources/META-INF/dirigible/resources-locale/translations/en-US/common.json index d3ec5c66d10..fb191647129 100644 --- a/components/resources/resources-locale/src/main/resources/META-INF/dirigible/resources-locale/translations/en-US/common.json +++ b/components/resources/resources-locale/src/main/resources/META-INF/dirigible/resources-locale/translations/en-US/common.json @@ -31,6 +31,7 @@ "yes": "Yes", "no": "No", "ok": "OK", + "select": "Select", "cancel": "Cancel", "add": "Add", "edit": "Edit", diff --git a/components/template/template-form-builder-angularjs/src/main/resources/META-INF/dirigible/template-form-builder-angularjs/ui/controller.js.template b/components/template/template-form-builder-angularjs/src/main/resources/META-INF/dirigible/template-form-builder-angularjs/ui/controller.js.template index afd2bc9798a..dfe5231b953 100644 --- a/components/template/template-form-builder-angularjs/src/main/resources/META-INF/dirigible/template-form-builder-angularjs/ui/controller.js.template +++ b/components/template/template-form-builder-angularjs/src/main/resources/META-INF/dirigible/template-form-builder-angularjs/ui/controller.js.template @@ -14,8 +14,31 @@ angular.module('forms', ['blimpKit', 'platformView', 'platformLocale', 'platform return new Date(value); }); } +})).directive('modelArrayToString', () => ({ + require: 'ngModel', + link: (_scope, _element, _attrs, ngModel) => { + ngModel.${dollar}formatters.push((value) => { + if (Array.isArray(value)) return `"${value.join('", "')}"`; + return value; + }); + } })).constant('Dialogs', new DialogHub()).controller('FormController', ($scope, $http, Dialogs, LocaleService, ViewParameters) => { $scope._is_view = ViewParameters.get().container !== undefined; + $scope._stepIndicators = {}; + ${dollar}scope._selectFromDocuments = (modelKey, multiple, uploadEnabled) => { + Dialogs.showWindow({id: 'documentStorage', params: { readOnly: !uploadEnabled, multiple: multiple, topic: '${projectName}.doc.select' } }); + const docSelectListener = Dialogs.addMessageListener({ + topic: '${projectName}.doc.select', + handler: (data) => { + if (data) { + ${dollar}scope.$evalAsync(() => { + ${dollar}scope.model[modelKey] = data.length > 1 ? data : data[0]; + }); + } + Dialogs.removeMessageListener(docSelectListener); + } + }); + }; $scope.forms = { form: {} }; @@ -59,7 +82,27 @@ angular.module('forms', ['blimpKit', 'platformView', 'platformLocale', 'platform $scope.model = {}; #macro(formWidgets $elements) #foreach($element in $elements) - #if($element.controlId == "input-number") + #if($element.controlId == "stepIndicator" && $element.staticData) + ${dollar}scope._stepIndicators['$element.id'] = []; + LocaleService.onInit(() => { + ${dollar}scope._stepIndicators['$element.id'].push( + #foreach($step in $element.steps) + { + label: LocaleService.t('$projectName:${tprefix}.$step.translation', '$step.label'), + #if($step.secondaryLabel) + secondaryLabel: '$step.secondaryLabel', + #end + #if($step.glyph) + glyph: '$step.glyph', + #end + #if($step.svg) + svg: '$step.svg', + #end + }, + #end + ); + }); + #elseif($element.controlId == "input-number") $scope.model.$element.model = 0; #elseif($element.controlId == "input-checkbox") $scope.model.$element.model = false; diff --git a/components/template/template-form-builder-angularjs/src/main/resources/META-INF/dirigible/template-form-builder-angularjs/ui/index.html.template b/components/template/template-form-builder-angularjs/src/main/resources/META-INF/dirigible/template-form-builder-angularjs/ui/index.html.template index 9d95db879b6..ef299fabec1 100644 --- a/components/template/template-form-builder-angularjs/src/main/resources/META-INF/dirigible/template-form-builder-angularjs/ui/index.html.template +++ b/components/template/template-form-builder-angularjs/src/main/resources/META-INF/dirigible/template-form-builder-angularjs/ui/index.html.template @@ -55,6 +55,28 @@ $result## #else $element.desc #end + #elseif($element.controlId == "input-documents") + + {{ '$projectName:${tprefix}.t.$element.translation' | t:'$element.label' }} +
+
+ + + +
+
+
#elseif($element.controlId == "input-textarea") {{ '$projectName:${tprefix}.t.$element.translation' | t:'$element.label' }} @@ -293,15 +315,21 @@ $result##
+ #elseif($element.controlId == "stepIndicator") + + + #elseif($element.controlId == "button") #elseif($element.controlId == "paragraph") <#getPTag($element.format) class="fd-text#if($element.format) bk-pre-wrap#end#if($element.subtitle) bk-text--subtitle#end#if($element.ellipsis) bk-scroll-hidden bk-text--ellipsis#end#if($element.italic) bk-font--italic#end#if($element.fontSize == 'sm') bk-font--small#end#if($element.fontSize == 'lg') bk-font--large#end #getPaddingClass($element.padding $element.side)">#if($element.model){{ model.$element.model }}#else$element.text#end + #elseif($element.controlId == "progress") + #elseif($element.controlId == "line") #elseif($element.controlId == "link") - $element.label + $element.label #elseif($element.controlId == "spacer")
diff --git a/components/ui/editor-form-builder/src/main/resources/META-INF/dirigible/editor-form-builder/editor.html b/components/ui/editor-form-builder/src/main/resources/META-INF/dirigible/editor-form-builder/editor.html index 5d21882a6c3..ea118a8962e 100644 --- a/components/ui/editor-form-builder/src/main/resources/META-INF/dirigible/editor-form-builder/editor.html +++ b/components/ui/editor-form-builder/src/main/resources/META-INF/dirigible/editor-form-builder/editor.html @@ -26,6 +26,12 @@ + @@ -127,12 +133,11 @@

{{ item.label }}

- +
- - + @@ -142,11 +147,19 @@

-

- + diff --git a/components/ui/editor-form-builder/src/main/resources/META-INF/dirigible/editor-form-builder/images/documents.svg b/components/ui/editor-form-builder/src/main/resources/META-INF/dirigible/editor-form-builder/images/documents.svg new file mode 100644 index 00000000000..bd22daa34c5 --- /dev/null +++ b/components/ui/editor-form-builder/src/main/resources/META-INF/dirigible/editor-form-builder/images/documents.svg @@ -0,0 +1,4 @@ + + + + diff --git a/components/ui/editor-form-builder/src/main/resources/META-INF/dirigible/editor-form-builder/images/form-complete.svg b/components/ui/editor-form-builder/src/main/resources/META-INF/dirigible/editor-form-builder/images/form-complete.svg new file mode 100644 index 00000000000..cfa033bd448 --- /dev/null +++ b/components/ui/editor-form-builder/src/main/resources/META-INF/dirigible/editor-form-builder/images/form-complete.svg @@ -0,0 +1,4 @@ + + + + diff --git a/components/ui/editor-form-builder/src/main/resources/META-INF/dirigible/editor-form-builder/images/progress.svg b/components/ui/editor-form-builder/src/main/resources/META-INF/dirigible/editor-form-builder/images/progress.svg new file mode 100644 index 00000000000..c8572a2afb8 --- /dev/null +++ b/components/ui/editor-form-builder/src/main/resources/META-INF/dirigible/editor-form-builder/images/progress.svg @@ -0,0 +1,4 @@ + + + + diff --git a/components/ui/editor-form-builder/src/main/resources/META-INF/dirigible/editor-form-builder/js/editor.js b/components/ui/editor-form-builder/src/main/resources/META-INF/dirigible/editor-form-builder/js/editor.js index 66b135bbb5a..23852b96d92 100644 --- a/components/ui/editor-form-builder/src/main/resources/META-INF/dirigible/editor-form-builder/js/editor.js +++ b/components/ui/editor-form-builder/src/main/resources/META-INF/dirigible/editor-form-builder/js/editor.js @@ -237,7 +237,7 @@ editorView.controller('DesignerController', ($scope, $window, $document, $timeou label: 'Button', icon: 'sap-icon--border', description: 'Button', - template: getControlWrapper(``), + template: getControlWrapper(``), props: { label: { type: 'text', @@ -937,8 +937,16 @@ editorView.controller('DesignerController', ($scope, $window, $document, $timeou enabledOn: { key: 'staticData', value: true }, type: 'list', label: 'Options', - labelText: 'Label', - valueText: 'Value', + columns: [{ + label: 'Label', + key: 'label', + required: true + }, { + label: 'Value', + key: 'value', + patterns: ['^\\S*$'], + required: true + }], defaultValue: '', value: [ { label: 'Item 1', value: 'item1' }, @@ -1050,8 +1058,16 @@ editorView.controller('DesignerController', ($scope, $window, $document, $timeou enabledOn: { key: 'staticData', value: true }, type: 'list', label: 'Options', - labelText: 'Label', - valueText: 'Value', + columns: [{ + label: 'Label', + key: 'label', + required: true + }, { + label: 'Value', + key: 'value', + patterns: ['^\\S*$'], + required: true + }], defaultValue: '', value: [ { label: 'Item 1', value: 'item1' }, @@ -1075,6 +1091,76 @@ editorView.controller('DesignerController', ($scope, $window, $document, $timeou }, }, }, + { + controlId: 'input-documents', + label: 'Document Select', + svg: '/services/web/editor-form-builder/images/documents.svg', + description: 'Select from document storage', + template: getControlWrapper(` + {{ props.label.value }} +
+
+ + + +
+
+
`), + props: { + id: { + type: 'text', + label: 'Name', + placeholder: 'Form Item Name', + value: '', + required: true, + }, + label: { + type: 'text', + label: 'Label', + value: 'Input', + placeholder: 'Input label', + required: false, + }, + horizontal: { + type: 'checkbox', + label: 'Horizontal', + value: false, + }, + isCompact: { + type: 'checkbox', + label: 'Compact', + value: false, + }, + readonly: { + type: 'checkbox', + label: 'Prevent Editing', + value: false, + }, + uploadEnabled: { + type: 'checkbox', + label: 'Upload Enabled', + value: false, + }, + multiple: { + type: 'checkbox', + label: 'Multiple', + value: false, + }, + model: { + type: 'text', + label: 'Model', + value: '', + placeholder: '', + required: true, + }, + required: { + type: 'checkbox', + label: 'Required', + value: true, + }, + }, + } ] }, { @@ -1222,6 +1308,68 @@ editorView.controller('DesignerController', ($scope, $window, $document, $timeou ...paddingProps }, }, + { + controlId: 'progress', + label: 'Progress Bar', + svg: '/services/web/editor-form-builder/images/progress.svg', + description: 'Progress Indicator', + template: getControlWrapper(``), + props: { + state: { + type: 'dropdown', + label: 'State', + value: '', + items: [ + { + label: 'Default', + value: '', + }, + { + label: 'Informative', + value: 'informative', + }, + { + label: 'Positive', + value: 'positive', + }, + { + label: 'Critical', + value: 'critical', + }, + { + label: 'Negative', + value: 'negative', + } + ] + }, + label: { + type: 'text', + label: 'Label', + value: '', + placeholder: 'Something is happening...', + }, + airaLabel: { + type: 'text', + label: 'Accessibility Label', + value: '', + placeholder: 'progress for ...', + }, + value: { + type: 'number', + label: 'Percentage', + value: 40, + max: 100, + min: 1, + step: 1, + }, + variable: { + type: 'text', + label: 'Variable', + value: '', + placeholder: 'progressVar', + }, + }, + }, { controlId: 'table', label: 'Table', @@ -1240,13 +1388,6 @@ editorView.controller('DesignerController', ($scope, $window, $document, $timeou
{{ item.labelText }}{{ item.valueText }}{{ column.label }}
{{listItem.label}}{{listItem.value}}{{listItem[column.key]}} - - + + + + + + + + + + +
`), props: { - id: { - type: 'text', - label: 'Name', - placeholder: 'Form Item Name', - value: '', - required: true, - }, isFixed: { type: 'checkbox', label: 'Fixed', @@ -1333,8 +1474,16 @@ editorView.controller('DesignerController', ($scope, $window, $document, $timeou headers: { type: 'list', label: 'Headers', - labelText: 'Label', - valueText: 'Key', + columns: [{ + label: 'Label', + key: 'label', + required: true + }, { + label: 'Key', + key: 'value', + patterns: ['^\\S*$'], + required: true + }], value: [ { label: 'Name', value: 'name' }, { label: 'Age', value: 'age' } @@ -1384,7 +1533,7 @@ editorView.controller('DesignerController', ($scope, $window, $document, $timeou icon: 'sap-icon--chain-link', iconRotate: true, description: 'Hyperlink', - template: getControlWrapper(`{{props.label.value ? props.label.value : 'Link'}}`), + template: getControlWrapper(`{{props.label.value ? props.label.value : 'Link'}}`), props: { label: { type: 'text', @@ -1410,6 +1559,84 @@ editorView.controller('DesignerController', ($scope, $window, $document, $timeou label: 'Open in new tab', value: true, }, + ...paddingProps + } + }, + { + controlId: 'stepIndicator', + label: 'Step Indicator', + icon: 'sap-icon--step', + description: 'Step indicator', + template: getControlWrapper(``), + props: { + id: { value: '' }, + iconOnly: { + type: 'checkbox', + label: 'Icon-only', + value: false, + }, + staticData: { + type: 'checkbox', + label: 'Static Data', + value: true, + }, + currentStep: { + enabledOn: { key: 'staticData', value: true }, + type: 'number', + label: 'Current Step', + value: 1, + step: 1, + }, + steps: { + enabledOn: { key: 'staticData', value: true }, + type: 'list', + label: 'Steps', + columns: [{ + label: 'Label', + key: 'label', + required: true + }, { + label: 'Desc.', + key: 'secondaryLabel', + }, { + label: 'Icon', + key: 'glyph' + }, { + label: 'SVG', + key: 'svg' + }], + defaultValue: '', + placeholderValue: [{ label: 'Step 1' }, { label: 'Step 2' }], + value: [{ + label: 'Step 1', + glyph: 'sap-icon--product', + }, { + label: 'Step 2', + svg: '/services/web/editor-form-builder/images/form-complete.svg', + }, { + label: 'Step 3', + secondaryLabel: 'Last step', + }] + }, + stepVar: { + enabledOn: { key: 'staticData', value: false }, + type: 'text', + label: 'Current Step Variable', + value: '', + required: true, + }, + stepsVar: { + enabledOn: { key: 'staticData', value: false }, + type: 'text', + label: 'Steps', + value: '', + placeholder: '', + }, + info: { + type: 'textinfo', + label: 'Example Data', + value: '[\n {\n "label": "Step 1",\n "glyph": "sap-icon--product"\n },\n {\n "label": "Step 2",\n "svg": "/services/web/editor-form-builder/images/form-complete.svg"\n },\n {\n "label": "Step 3",\n "secondaryLabel": "Last step"\n }\n]', + }, } }, { @@ -1417,7 +1644,7 @@ editorView.controller('DesignerController', ($scope, $window, $document, $timeou label: 'Spacer', icon: 'sap-icon--expand', iconRotate: true, - description: 'Divider line', + description: 'Layout spacing element', template: getControlWrapper(`
`), props: { stretch: { @@ -1636,8 +1863,8 @@ editorView.controller('DesignerController', ($scope, $window, $document, $timeou const element = $compile(control.template)(control.$scope)[0]; $(event.item).replaceWith(element); if (isContainer) createSublist(element, control.$scope.id); - requestAnimationFrame(() => { - $scope.$evalAsync(() => { + angular.element(element).ready(() => { + $timeout(() => { element.click(); }); }); @@ -1777,45 +2004,36 @@ editorView.controller('DesignerController', ($scope, $window, $document, $timeou }; $scope.addListItem = (item) => { + const form = {}; + for (let c = 0; c < item.columns.length; c++) { + form[`fali-${item.columns[c].key}`] = { + controlType: 'input', + label: item.columns[c].label, + type: 'text', + focus: c === 0, + required: item.columns[c].required, + minlength: item.columns[c].required ? 1 : 0, + inputRules: item.columns[c].patterns ? { + patterns: item.columns[c].patterns, + } : undefined, + } + } dialogHub.showFormDialog({ title: 'Add item', - form: { - 'aliLabel': { - label: item.labelText, - controlType: 'input', - placeholder: '', - type: 'text', - minlength: 1, - focus: true, - required: true - }, - 'aliValue': { - label: item.valueText, - controlType: 'input', - placeholder: '', - type: 'text', - minlength: 1, - inputRules: { - patterns: ['^\\S*$'], - }, - required: true - }, - }, + form: form, submitLabel: 'Add', cancelLabel: 'Cancel' }).then((form) => { if (form) { $scope.$evalAsync(() => { - if (item.value) item.value.push({ - label: form['aliLabel'], - value: form['aliValue'] - }); + let listItem = {}; + for (const [key, value] of Object.entries(form)) { + listItem[key.replace('fali-', '')] = value; + } + if (item.value) item.value.push(listItem); else { item.defaultValue = ''; - item.value = [{ - label: form['aliLabel'], - value: form['aliValue'] - }]; + item.value = [listItem]; } $scope.fileChanged(); }); @@ -1831,40 +2049,33 @@ editorView.controller('DesignerController', ($scope, $window, $document, $timeou }); }; - $scope.editListItem = (listItem, labelText, valueText) => { + $scope.editListItem = (listItem, columns) => { + const form = {}; + for (let c = 0; c < columns.length; c++) { + form[`feli-${columns[c].key}`] = { + controlType: 'input', + label: columns[c].label, + value: listItem[columns[c].key], + type: 'text', + focus: c === 0, + required: columns[c].required, + minlength: columns[c].required ? 1 : 0, + inputRules: columns[c].patterns ? { + patterns: columns[c].patterns, + } : undefined, + } + } dialogHub.showFormDialog({ title: 'Edit item', - form: { - 'aliLabel': { - label: labelText, - controlType: 'input', - placeholder: '', - type: 'text', - minlength: 1, - value: listItem.label, - focus: true, - required: true - }, - 'aliValue': { - label: valueText, - controlType: 'input', - placeholder: '', - type: 'text', - minlength: 1, - inputRules: { - patterns: ['^\\S*$'], - }, - value: listItem.value, - required: true - }, - }, + form: form, submitLabel: 'Save', cancelLabel: 'Cancel' }).then((form) => { if (form) { $scope.$evalAsync(() => { - listItem.label = form['aliLabel']; - listItem.value = form['aliValue']; + for (const [key, value] of Object.entries(form)) { + listItem[key.replace('feli-', '')] = value; + } $scope.fileChanged(); }); } @@ -2168,30 +2379,34 @@ editorView.controller('DesignerController', ($scope, $window, $document, $timeou break; } } - $timeout(() => { - if (groupIndex === 2) { - insertInModel($scope.formModel, control, control.$scope.id); - const element = angular.element($document[0].querySelector(`#${control.$scope.id}`)); - element.append($compile(control.template)(control.$scope)[0]); - element.ready(() => { - createSublist(document.querySelector(`#${control.$scope.id}`), control.$scope.id); - }); - } - if (containerId !== undefined) { - insertInModel($scope.formModel, control, containerId); - const element = angular.element($document[0].querySelector(`#${containerId}`)); - element.append($compile(control.template)(control.$scope)[0]); - element.ready(() => { - createSublist(document.querySelector(`#${containerId}`), containerId); - }); - } else { - $scope.formModel.push(control); - formContainer.append($compile(control.template)(control.$scope)[0]); - } - if (groupIndex === 2 && model[i].children.length > 0) { - createDomFromJson(model[i].children, control.$scope.id); - } - }, 0); + if (!control) { + console.error('form editor', 'Unknown control', model[i]); + } else { + $timeout(() => { + if (groupIndex === 2) { + insertInModel($scope.formModel, control, control.$scope.id); + const element = angular.element($document[0].querySelector(`#${control.$scope.id}`)); + element.append($compile(control.template)(control.$scope)[0]); + element.ready(() => { + createSublist(document.querySelector(`#${control.$scope.id}`), control.$scope.id); + }); + } + if (containerId !== undefined) { + insertInModel($scope.formModel, control, containerId); + const element = angular.element($document[0].querySelector(`#${containerId}`)); + element.append($compile(control.template)(control.$scope)[0]); + element.ready(() => { + createSublist(document.querySelector(`#${containerId}`), containerId); + }); + } else { + $scope.formModel.push(control); + formContainer.append($compile(control.template)(control.$scope)[0]); + } + if (groupIndex === 2 && model[i].children.length > 0) { + createDomFromJson(model[i].children, control.$scope.id); + } + }, 0); + } } }; diff --git a/components/ui/perspective-documents/src/main/resources/META-INF/dirigible/perspective-documents/configs/documents.js b/components/ui/perspective-documents/src/main/resources/META-INF/dirigible/perspective-documents/configs/documents.js index 0e83425daa4..6cd23c4ac94 100644 --- a/components/ui/perspective-documents/src/main/resources/META-INF/dirigible/perspective-documents/configs/documents.js +++ b/components/ui/perspective-documents/src/main/resources/META-INF/dirigible/perspective-documents/configs/documents.js @@ -10,7 +10,7 @@ * SPDX-License-Identifier: EPL-2.0 */ const perspectiveData = { - id: 'perspectiveDocuments', + id: 'documentStorage', label: 'Documents', path: '/services/web/documents/index.html', order: 150, @@ -19,6 +19,8 @@ const perspectiveData = { const viewData = { lazyLoad: true, region: 'center', + hasHeader: false, + maxWidth: '640px', ...perspectiveData }; if (typeof exports !== 'undefined') { diff --git a/components/ui/perspective-documents/src/main/resources/META-INF/dirigible/perspective-documents/extensions/window-documents.extension b/components/ui/perspective-documents/src/main/resources/META-INF/dirigible/perspective-documents/extensions/window-documents.extension new file mode 100644 index 00000000000..06086cbfaea --- /dev/null +++ b/components/ui/perspective-documents/src/main/resources/META-INF/dirigible/perspective-documents/extensions/window-documents.extension @@ -0,0 +1,5 @@ +{ + "module": "perspective-documents/configs/documents.js", + "extensionPoint": "platform-windows", + "description": "Documents Window" +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 72a9ca71c68..5097770d04e 100644 --- a/pom.xml +++ b/pom.xml @@ -208,7 +208,7 @@ 2.12.6 - 1.8.11 + 1.9.1 11.18.2 4.4.3 1.15.7