diff --git a/app/SearchDisplace/Searchers/Mapper.php b/app/SearchDisplace/Searchers/Mapper.php index b0121d6..192a8ab 100644 --- a/app/SearchDisplace/Searchers/Mapper.php +++ b/app/SearchDisplace/Searchers/Mapper.php @@ -11,54 +11,67 @@ class Mapper $this->mapper = [ 'amount-of-money' => [ 'name' => 'Amount Of Money', + 'param' => SearchersCollection::PARAM_REQUIRED ], 'credit-card-number' => [ 'name' => 'Credit Card Number', + 'param' => SearchersCollection::PARAM_REQUIRED ], 'distance' => [ 'name' => 'Distance', + 'param' => SearchersCollection::PARAM_REQUIRED ], 'duration' => [ 'name' => 'Duration', + 'param' => SearchersCollection::PARAM_REQUIRED ], 'email' => [ 'name' => 'Email', + 'param' => SearchersCollection::PARAM_OPTIONAL ], 'numeral' => [ 'name' => 'Numeral', + 'param' => SearchersCollection::PARAM_REQUIRED ], 'ordinal' => [ 'name' => 'Ordinal', + 'param' => SearchersCollection::PARAM_REQUIRED ], 'phone-number' => [ 'name' => 'Phone Number', + 'param' => SearchersCollection::PARAM_REQUIRED ], 'quantity' => [ 'name' => 'Quantity', + 'param' => SearchersCollection::PARAM_REQUIRED ], 'temperature' => [ 'name' => 'Temperature', + 'param' => SearchersCollection::PARAM_REQUIRED ], 'time' => [ 'name' => 'Time', + 'param' => SearchersCollection::PARAM_REQUIRED ], 'url' => [ 'name' => 'URL', + 'param' => SearchersCollection::PARAM_REQUIRED ], 'volume' => [ 'name' => 'Volume', + 'param' => SearchersCollection::PARAM_REQUIRED ], ]; } @@ -76,6 +89,7 @@ class Mapper $items[$key] = [ 'id' => $key, 'name' => $value['name'], + 'param' => $value['param'] ]; } diff --git a/app/SearchDisplace/Searchers/SearchersCollection.php b/app/SearchDisplace/Searchers/SearchersCollection.php index 1096c7e..54bd17c 100644 --- a/app/SearchDisplace/Searchers/SearchersCollection.php +++ b/app/SearchDisplace/Searchers/SearchersCollection.php @@ -4,6 +4,9 @@ namespace App\SearchDisplace\Searchers; class SearchersCollection { + const PARAM_REQUIRED = 'required'; + const PARAM_OPTIONAL = 'optional'; + public function all() { $collection = []; diff --git a/app/SearchDisplace/Searchers/SearchersStorage.php b/app/SearchDisplace/Searchers/SearchersStorage.php index 4041ffd..5ca2d38 100644 --- a/app/SearchDisplace/Searchers/SearchersStorage.php +++ b/app/SearchDisplace/Searchers/SearchersStorage.php @@ -28,6 +28,13 @@ class SearchersStorage $searchers[$fileName] = [ 'id' => $fileName, 'name' => $result[1], + 'param' => SearchersCollection::PARAM_REQUIRED + ]; + } else if (count($result) === 3) { + $searchers[$fileName] = [ + 'id' => $fileName, + 'name' => $result[1], + 'param' => $result[2] ]; } } diff --git a/public/js/app.js b/public/js/app.js index 2f88331..3c777a0 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -3166,7 +3166,7 @@ AppHeader = (0,tslib__WEBPACK_IMPORTED_MODULE_1__.__decorate)([vue_class_compone "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _bootstrap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./bootstrap */ "./resources/js/bootstrap.ts"); -/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm.js"); +/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm.js"); /* harmony import */ var primevue_config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! primevue/config */ "./node_modules/primevue/config/index.js"); /* harmony import */ var primevue_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! primevue/button */ "./node_modules/primevue/button/index.js"); /* harmony import */ var primevue_panel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! primevue/panel */ "./node_modules/primevue/panel/index.js"); @@ -3197,15 +3197,16 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var primevue_scrollpanel__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! primevue/scrollpanel */ "./node_modules/primevue/scrollpanel/index.js"); /* harmony import */ var primevue_confirmationservice__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! primevue/confirmationservice */ "./node_modules/primevue/confirmationservice/index.js"); /* harmony import */ var primevue_confirmdialog__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! primevue/confirmdialog */ "./node_modules/primevue/confirmdialog/index.js"); -/* harmony import */ var _components_layout_Header_vue__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./components/layout/Header.vue */ "./resources/js/components/layout/Header.vue"); -/* harmony import */ var _components_layout_Footer_vue__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./components/layout/Footer.vue */ "./resources/js/components/layout/Footer.vue"); -/* harmony import */ var _components_Regex_Create_vue__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./components/Regex/Create.vue */ "./resources/js/components/Regex/Create.vue"); -/* harmony import */ var _components_Searchers_Index_vue__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./components/Searchers/Index.vue */ "./resources/js/components/Searchers/Index.vue"); -/* harmony import */ var _components_Searchers_Create_vue__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./components/Searchers/Create.vue */ "./resources/js/components/Searchers/Create.vue"); -/* harmony import */ var _components_Searchers_Show_vue__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./components/Searchers/Show.vue */ "./resources/js/components/Searchers/Show.vue"); -/* harmony import */ var _plugins_ApiPlugin__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./plugins/ApiPlugin */ "./resources/js/plugins/ApiPlugin.ts"); -/* harmony import */ var _components_Home_Home_vue__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./components/Home/Home.vue */ "./resources/js/components/Home/Home.vue"); -/* harmony import */ var _components_ProcessFile_ProcessFile_vue__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./components/ProcessFile/ProcessFile.vue */ "./resources/js/components/ProcessFile/ProcessFile.vue"); +/* harmony import */ var primevue_tooltip__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! primevue/tooltip */ "./node_modules/primevue/tooltip/index.js"); +/* harmony import */ var _components_layout_Header_vue__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./components/layout/Header.vue */ "./resources/js/components/layout/Header.vue"); +/* harmony import */ var _components_layout_Footer_vue__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./components/layout/Footer.vue */ "./resources/js/components/layout/Footer.vue"); +/* harmony import */ var _components_Regex_Create_vue__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./components/Regex/Create.vue */ "./resources/js/components/Regex/Create.vue"); +/* harmony import */ var _components_Searchers_Index_vue__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./components/Searchers/Index.vue */ "./resources/js/components/Searchers/Index.vue"); +/* harmony import */ var _components_Searchers_Create_vue__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./components/Searchers/Create.vue */ "./resources/js/components/Searchers/Create.vue"); +/* harmony import */ var _components_Searchers_Show_vue__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./components/Searchers/Show.vue */ "./resources/js/components/Searchers/Show.vue"); +/* harmony import */ var _plugins_ApiPlugin__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./plugins/ApiPlugin */ "./resources/js/plugins/ApiPlugin.ts"); +/* harmony import */ var _components_Home_Home_vue__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./components/Home/Home.vue */ "./resources/js/components/Home/Home.vue"); +/* harmony import */ var _components_ProcessFile_ProcessFile_vue__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./components/ProcessFile/ProcessFile.vue */ "./resources/js/components/ProcessFile/ProcessFile.vue"); /** @@ -3239,6 +3240,7 @@ __webpack_require__.r(__webpack_exports__); + // Own components @@ -3252,54 +3254,55 @@ __webpack_require__.r(__webpack_exports__); -vue__WEBPACK_IMPORTED_MODULE_40__.default.use(primevue_config__WEBPACK_IMPORTED_MODULE_1__.default, { +vue__WEBPACK_IMPORTED_MODULE_41__.default.use(primevue_config__WEBPACK_IMPORTED_MODULE_1__.default, { ripple: true }); -vue__WEBPACK_IMPORTED_MODULE_40__.default.use(primevue_toastservice__WEBPACK_IMPORTED_MODULE_14__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.use(primevue_confirmationservice__WEBPACK_IMPORTED_MODULE_29__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.use(_plugins_ApiPlugin__WEBPACK_IMPORTED_MODULE_37__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('Button', primevue_button__WEBPACK_IMPORTED_MODULE_2__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('Panel', primevue_panel__WEBPACK_IMPORTED_MODULE_3__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('Card', primevue_card__WEBPACK_IMPORTED_MODULE_4__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('FileUpload', primevue_fileupload__WEBPACK_IMPORTED_MODULE_5__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('BlockUI', primevue_blockui__WEBPACK_IMPORTED_MODULE_6__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('Sidebar', primevue_sidebar__WEBPACK_IMPORTED_MODULE_7__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('OrderList', primevue_orderlist__WEBPACK_IMPORTED_MODULE_8__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('Chip', primevue_chip__WEBPACK_IMPORTED_MODULE_9__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('Divider', primevue_divider__WEBPACK_IMPORTED_MODULE_10__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('Listbox', primevue_listbox__WEBPACK_IMPORTED_MODULE_11__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('Toolbar', primevue_toolbar__WEBPACK_IMPORTED_MODULE_12__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('Skeleton', primevue_skeleton__WEBPACK_IMPORTED_MODULE_13__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('Toast', primevue_toast__WEBPACK_IMPORTED_MODULE_15__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('Dropdown', primevue_dropdown__WEBPACK_IMPORTED_MODULE_17__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('Fieldset', primevue_fieldset__WEBPACK_IMPORTED_MODULE_16__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('InputSwitch', primevue_inputswitch__WEBPACK_IMPORTED_MODULE_18__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('DataTable', primevue_datatable__WEBPACK_IMPORTED_MODULE_19__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('Column', primevue_column__WEBPACK_IMPORTED_MODULE_20__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('OverlayPanel', primevue_overlaypanel__WEBPACK_IMPORTED_MODULE_21__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('Checkbox', primevue_checkbox__WEBPACK_IMPORTED_MODULE_22__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('ProgressSpinner', primevue_progressspinner__WEBPACK_IMPORTED_MODULE_23__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('InputText', primevue_inputtext__WEBPACK_IMPORTED_MODULE_24__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('Dialog', primevue_dialog__WEBPACK_IMPORTED_MODULE_25__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('Message', primevue_message__WEBPACK_IMPORTED_MODULE_26__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('Timeline', primevue_timeline__WEBPACK_IMPORTED_MODULE_27__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('ScrollPanel', primevue_scrollpanel__WEBPACK_IMPORTED_MODULE_28__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('ConfirmDialog', primevue_confirmdialog__WEBPACK_IMPORTED_MODULE_30__.default); // Layout - -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('app-header', _components_layout_Header_vue__WEBPACK_IMPORTED_MODULE_31__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('app-footer', _components_layout_Footer_vue__WEBPACK_IMPORTED_MODULE_32__.default); // Views - -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('home', _components_Home_Home_vue__WEBPACK_IMPORTED_MODULE_38__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('regex-create', _components_Regex_Create_vue__WEBPACK_IMPORTED_MODULE_33__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('searchers-index', _components_Searchers_Index_vue__WEBPACK_IMPORTED_MODULE_34__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('searchers-create', _components_Searchers_Create_vue__WEBPACK_IMPORTED_MODULE_35__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('searchers-show', _components_Searchers_Show_vue__WEBPACK_IMPORTED_MODULE_36__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('searchers-index', _components_Searchers_Index_vue__WEBPACK_IMPORTED_MODULE_34__.default); // Includes - -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('process-file', _components_ProcessFile_ProcessFile_vue__WEBPACK_IMPORTED_MODULE_39__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('app-header', _components_layout_Header_vue__WEBPACK_IMPORTED_MODULE_31__.default); -vue__WEBPACK_IMPORTED_MODULE_40__.default.component('app-footer', _components_layout_Footer_vue__WEBPACK_IMPORTED_MODULE_32__.default); -new vue__WEBPACK_IMPORTED_MODULE_40__.default({ +vue__WEBPACK_IMPORTED_MODULE_41__.default.use(primevue_toastservice__WEBPACK_IMPORTED_MODULE_14__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.use(primevue_confirmationservice__WEBPACK_IMPORTED_MODULE_29__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.use(_plugins_ApiPlugin__WEBPACK_IMPORTED_MODULE_38__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('Button', primevue_button__WEBPACK_IMPORTED_MODULE_2__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('Panel', primevue_panel__WEBPACK_IMPORTED_MODULE_3__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('Card', primevue_card__WEBPACK_IMPORTED_MODULE_4__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('FileUpload', primevue_fileupload__WEBPACK_IMPORTED_MODULE_5__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('BlockUI', primevue_blockui__WEBPACK_IMPORTED_MODULE_6__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('Sidebar', primevue_sidebar__WEBPACK_IMPORTED_MODULE_7__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('OrderList', primevue_orderlist__WEBPACK_IMPORTED_MODULE_8__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('Chip', primevue_chip__WEBPACK_IMPORTED_MODULE_9__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('Divider', primevue_divider__WEBPACK_IMPORTED_MODULE_10__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('Listbox', primevue_listbox__WEBPACK_IMPORTED_MODULE_11__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('Toolbar', primevue_toolbar__WEBPACK_IMPORTED_MODULE_12__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('Skeleton', primevue_skeleton__WEBPACK_IMPORTED_MODULE_13__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('Toast', primevue_toast__WEBPACK_IMPORTED_MODULE_15__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('Dropdown', primevue_dropdown__WEBPACK_IMPORTED_MODULE_17__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('Fieldset', primevue_fieldset__WEBPACK_IMPORTED_MODULE_16__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('InputSwitch', primevue_inputswitch__WEBPACK_IMPORTED_MODULE_18__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('DataTable', primevue_datatable__WEBPACK_IMPORTED_MODULE_19__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('Column', primevue_column__WEBPACK_IMPORTED_MODULE_20__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('OverlayPanel', primevue_overlaypanel__WEBPACK_IMPORTED_MODULE_21__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('Checkbox', primevue_checkbox__WEBPACK_IMPORTED_MODULE_22__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('ProgressSpinner', primevue_progressspinner__WEBPACK_IMPORTED_MODULE_23__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('InputText', primevue_inputtext__WEBPACK_IMPORTED_MODULE_24__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('Dialog', primevue_dialog__WEBPACK_IMPORTED_MODULE_25__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('Message', primevue_message__WEBPACK_IMPORTED_MODULE_26__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('Timeline', primevue_timeline__WEBPACK_IMPORTED_MODULE_27__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('ScrollPanel', primevue_scrollpanel__WEBPACK_IMPORTED_MODULE_28__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('ConfirmDialog', primevue_confirmdialog__WEBPACK_IMPORTED_MODULE_30__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.directive('tooltip', primevue_tooltip__WEBPACK_IMPORTED_MODULE_31__.default); // Layout + +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('app-header', _components_layout_Header_vue__WEBPACK_IMPORTED_MODULE_32__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('app-footer', _components_layout_Footer_vue__WEBPACK_IMPORTED_MODULE_33__.default); // Views + +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('home', _components_Home_Home_vue__WEBPACK_IMPORTED_MODULE_39__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('regex-create', _components_Regex_Create_vue__WEBPACK_IMPORTED_MODULE_34__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('searchers-index', _components_Searchers_Index_vue__WEBPACK_IMPORTED_MODULE_35__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('searchers-create', _components_Searchers_Create_vue__WEBPACK_IMPORTED_MODULE_36__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('searchers-show', _components_Searchers_Show_vue__WEBPACK_IMPORTED_MODULE_37__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('searchers-index', _components_Searchers_Index_vue__WEBPACK_IMPORTED_MODULE_35__.default); // Includes + +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('process-file', _components_ProcessFile_ProcessFile_vue__WEBPACK_IMPORTED_MODULE_40__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('app-header', _components_layout_Header_vue__WEBPACK_IMPORTED_MODULE_32__.default); +vue__WEBPACK_IMPORTED_MODULE_41__.default.component('app-footer', _components_layout_Footer_vue__WEBPACK_IMPORTED_MODULE_33__.default); +new vue__WEBPACK_IMPORTED_MODULE_41__.default({ el: '#app' }); @@ -3412,14 +3415,19 @@ var Home = /*#__PURE__*/function (_Vue) { _this.error = ''; return _this; } - /** - * A method which uploads the files to the server for processing - * - * @param {any} event The event containing the uploaded files information - */ - _createClass(Home, [{ + key: "mounted", + value: function mounted() { + console.log('SEARCHERS: ', this.searchers); + } + /** + * A method which uploads the files to the server for processing + * + * @param {any} event The event containing the uploaded files information + */ + + }, { key: "uploadFile", value: function () { var _uploadFile = _asyncToGenerator( /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee(event) { @@ -3940,7 +3948,7 @@ var ProcessFile = /*#__PURE__*/function (_Vue) { }, { key: "createDiffPreview", value: function createDiffPreview() { - console.log('CREATING DIFF PREVIEW: ', this.processedFileContent); + // console.log('CREATING DIFF PREVIEW: ', this.processedFileContent); this.processedFileContentPreview = this.processedFileContent; var indexes = []; @@ -3994,6 +4002,17 @@ var ProcessFile = /*#__PURE__*/function (_Vue) { return downloadOdt; }() + }, { + key: "isValidParam", + value: function isValidParam(paramId, paramType) { + console.log('PARAM: ', paramId, this.searchersOptions[paramId]); + + if (paramType === 'required' && (this.searchersOptions[paramId] === '' || this.searchersOptions[paramId] === undefined)) { + return false; + } + + return true; + } /** * Watch the `showDiffHighlight` property for changes * @@ -4987,7 +5006,7 @@ __webpack_require__.r(__webpack_exports__); var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]}); // Module -___CSS_LOADER_EXPORT___.push([module.id, ".file-card {\n flex: 0 1 49%;\n}\n.p-overlaypanel {\n min-width: 450px;\n}\n.p-toolbar-group-right button {\n margin-left: 10px;\n}\n.p-sidebar-content .p-toolbar {\n margin-top: 32px;\n}\n.p-card-header .p-toolbar {\n border: unset;\n border-radius: unset;\n border-bottom: 1px solid #dee2e6;\n padding: 0.5rem;\n}\nbutton.add-searchers {\n height: 100%;\n}\n.p-button.sidebar-toggle-button {\n position: absolute;\n left: calc(-16px - 2.357rem);\n top: 50px;\n border-radius: 3px 0 0 3px;\n}\n.p-col.sidebar-title {\n display: flex;\n align-content: flex-start;\n justify-content: flex-start;\n}\nlabel.switch-label {\n padding-right: 10px;\n}\n.md-viewer {\n text-align: start !important;\n}\n.md-viewer h1, .md-viewer h2, .md-viewer h3, .md-viewer h4, .md-viewer h5 {\n font-size: initial;\n}\n@media only screen and (max-width: 1680px) {\n.p-card-header .p-toolbar {\n flex-flow: column;\n align-items: start;\n}\n}", ""]); +___CSS_LOADER_EXPORT___.push([module.id, ".file-card {\n flex: 0 1 49%;\n}\n.p-overlaypanel {\n min-width: 450px;\n}\n.p-toolbar-group-right button {\n margin-left: 10px;\n}\n.p-sidebar-content .p-toolbar {\n margin-top: 32px;\n}\n.p-card-header .p-toolbar {\n border: unset;\n border-radius: unset;\n border-bottom: 1px solid #dee2e6;\n padding: 0.5rem;\n}\nbutton.add-searchers {\n height: 100%;\n}\n.p-button.sidebar-toggle-button {\n position: absolute;\n left: calc(-16px - 2.357rem);\n top: 50px;\n border-radius: 3px 0 0 3px;\n}\n.p-col.sidebar-title {\n display: flex;\n align-content: flex-start;\n justify-content: flex-start;\n}\nlabel.switch-label {\n padding-right: 10px;\n}\n.md-viewer {\n text-align: start !important;\n}\n.md-viewer h1, .md-viewer h2, .md-viewer h3, .md-viewer h4, .md-viewer h5 {\n font-size: initial;\n}\n@media only screen and (max-width: 1680px) {\n.p-card-header .p-toolbar {\n flex-flow: column;\n align-items: start;\n}\n}\n.p-tooltip {\n z-index: 2004 !important;\n}", ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); @@ -8536,6 +8555,313 @@ module.exports = __webpack_require__(/*! ./Toolbar.vue */ "./node_modules/primev /***/ }), +/***/ "./node_modules/primevue/tooltip/Tooltip.js": +/*!**************************************************!*\ + !*** ./node_modules/primevue/tooltip/Tooltip.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.default = void 0; + +var _UniqueComponentId = _interopRequireDefault(__webpack_require__(/*! ../utils/UniqueComponentId */ "./node_modules/primevue/utils/UniqueComponentId.js")); + +var _DomHandler = _interopRequireDefault(__webpack_require__(/*! ../utils/DomHandler */ "./node_modules/primevue/utils/DomHandler.js")); + +var _ConnectedOverlayScrollHandler = _interopRequireDefault(__webpack_require__(/*! ../utils/ConnectedOverlayScrollHandler */ "./node_modules/primevue/utils/ConnectedOverlayScrollHandler.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function bindEvents(el) { + var modifiers = el.$_ptooltipModifiers; + + if (modifiers.focus) { + el.addEventListener('focus', onFocus); + el.addEventListener('blur', onBlur); + } else { + el.addEventListener('mouseenter', onMouseEnter); + el.addEventListener('mouseleave', onMouseLeave); + el.addEventListener('click', onClick); + } +} + +function unbindEvents(el) { + var modifiers = el.$_ptooltipModifiers; + + if (modifiers.focus) { + el.removeEventListener('focus', onFocus); + el.removeEventListener('blur', onBlur); + } else { + el.removeEventListener('mouseenter', onMouseEnter); + el.removeEventListener('mouseleave', onMouseLeave); + el.removeEventListener('click', onClick); + } +} + +function bindScrollListener(el) { + if (!el.$_ptooltipScrollHandler) { + el.$_ptooltipScrollHandler = new _ConnectedOverlayScrollHandler.default(el, function () { + hide(el); + }); + } + + el.$_ptooltipScrollHandler.bindScrollListener(); +} + +function unbindScrollListener(el) { + if (el.$_ptooltipScrollHandler) { + el.$_ptooltipScrollHandler.unbindScrollListener(); + } +} + +function onMouseEnter(event) { + show(event.currentTarget); +} + +function onMouseLeave(event) { + hide(event.currentTarget); +} + +function onFocus(event) { + show(event.currentTarget); +} + +function onBlur(event) { + hide(event.currentTarget); +} + +function onClick(event) { + hide(event.currentTarget); +} + +function show(el) { + if (!el.$_ptooltipValue) { + return; + } + + var tooltipElement = create(el); + align(el); + + _DomHandler.default.fadeIn(tooltipElement, 250); + + tooltipElement.style.zIndex = ++_DomHandler.default.zindex; + window.addEventListener('resize', function onWindowResize() { + hide(el); + this.removeEventListener('resize', onWindowResize); + }); + bindScrollListener(el); +} + +function hide(el) { + remove(el); + unbindScrollListener(el); +} + +function getTooltipElement(el) { + return document.getElementById(el.$_ptooltipId); +} + +function create(el) { + var id = (0, _UniqueComponentId.default)() + '_tooltip'; + el.$_ptooltipId = id; + var container = document.createElement('div'); + container.id = id; + var tooltipArrow = document.createElement('div'); + tooltipArrow.className = 'p-tooltip-arrow'; + container.appendChild(tooltipArrow); + var tooltipText = document.createElement('div'); + tooltipText.className = 'p-tooltip-text'; + tooltipText.innerHTML = el.$_ptooltipValue; + container.appendChild(tooltipText); + document.body.appendChild(container); + container.style.display = 'inline-block'; + return container; +} + +function remove(el) { + if (el) { + var tooltipElement = getTooltipElement(el); + + if (tooltipElement && tooltipElement.parentElement) { + document.body.removeChild(tooltipElement); + } + + el.$_ptooltipId = null; + } +} + +function align(el) { + var modifiers = el.$_ptooltipModifiers; + + if (modifiers.top) { + alignTop(el); + + if (isOutOfBounds(el)) { + alignBottom(el); + } + } else if (modifiers.left) { + alignLeft(el); + + if (isOutOfBounds(el)) { + alignRight(el); + + if (isOutOfBounds(el)) { + alignTop(el); + + if (isOutOfBounds(el)) { + alignBottom(el); + } + } + } + } else if (modifiers.bottom) { + alignBottom(el); + + if (isOutOfBounds(el)) { + alignTop(el); + } + } else { + alignRight(el); + + if (isOutOfBounds(el)) { + alignLeft(el); + + if (isOutOfBounds(el)) { + alignTop(el); + + if (isOutOfBounds(el)) { + alignBottom(el); + } + } + } + } +} + +function getHostOffset(el) { + var offset = el.getBoundingClientRect(); + + var targetLeft = offset.left + _DomHandler.default.getWindowScrollLeft(); + + var targetTop = offset.top + _DomHandler.default.getWindowScrollTop(); + + return { + left: targetLeft, + top: targetTop + }; +} + +function alignRight(el) { + preAlign(el, 'right'); + var tooltipElement = getTooltipElement(el); + var hostOffset = getHostOffset(el); + + var left = hostOffset.left + _DomHandler.default.getOuterWidth(el); + + var top = hostOffset.top + (_DomHandler.default.getOuterHeight(el) - _DomHandler.default.getOuterHeight(tooltipElement)) / 2; + tooltipElement.style.left = left + 'px'; + tooltipElement.style.top = top + 'px'; +} + +function alignLeft(el) { + preAlign(el, 'left'); + var tooltipElement = getTooltipElement(el); + var hostOffset = getHostOffset(el); + + var left = hostOffset.left - _DomHandler.default.getOuterWidth(tooltipElement); + + var top = hostOffset.top + (_DomHandler.default.getOuterHeight(el) - _DomHandler.default.getOuterHeight(tooltipElement)) / 2; + tooltipElement.style.left = left + 'px'; + tooltipElement.style.top = top + 'px'; +} + +function alignTop(el) { + preAlign(el, 'top'); + var tooltipElement = getTooltipElement(el); + var hostOffset = getHostOffset(el); + var left = hostOffset.left + (_DomHandler.default.getOuterWidth(el) - _DomHandler.default.getOuterWidth(tooltipElement)) / 2; + + var top = hostOffset.top - _DomHandler.default.getOuterHeight(tooltipElement); + + tooltipElement.style.left = left + 'px'; + tooltipElement.style.top = top + 'px'; +} + +function alignBottom(el) { + preAlign(el, 'bottom'); + var tooltipElement = getTooltipElement(el); + var hostOffset = getHostOffset(el); + var left = hostOffset.left + (_DomHandler.default.getOuterWidth(el) - _DomHandler.default.getOuterWidth(tooltipElement)) / 2; + + var top = hostOffset.top + _DomHandler.default.getOuterHeight(el); + + tooltipElement.style.left = left + 'px'; + tooltipElement.style.top = top + 'px'; +} + +function preAlign(el, position) { + var tooltipElement = getTooltipElement(el); + tooltipElement.style.left = -999 + 'px'; + tooltipElement.style.top = -999 + 'px'; + tooltipElement.className = 'p-tooltip p-component p-tooltip-' + position; +} + +function isOutOfBounds(el) { + var tooltipElement = getTooltipElement(el); + var offset = tooltipElement.getBoundingClientRect(); + var targetTop = offset.top; + var targetLeft = offset.left; + + var width = _DomHandler.default.getOuterWidth(tooltipElement); + + var height = _DomHandler.default.getOuterHeight(tooltipElement); + + var viewport = _DomHandler.default.getViewport(); + + return targetLeft + width > viewport.width || targetLeft < 0 || targetTop < 0 || targetTop + height > viewport.height; +} + +var Tooltip = { + bind: function bind(el, options) { + el.$_ptooltipModifiers = options.modifiers; + el.$_ptooltipValue = options.value; + bindEvents(el); + }, + unbind: function unbind(el) { + remove(el); + unbindEvents(el); + + if (el.$_ptooltipScrollHandler) { + el.$_ptooltipScrollHandler.destroy(); + el.$_ptooltipScrollHandler = null; + } + }, + update: function update(el, options) { + el.$_ptooltipModifiers = options.modifiers; + el.$_ptooltipValue = options.value; + } +}; +var _default = Tooltip; +exports.default = _default; + + +/***/ }), + +/***/ "./node_modules/primevue/tooltip/index.js": +/*!************************************************!*\ + !*** ./node_modules/primevue/tooltip/index.js ***! + \************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +module.exports = __webpack_require__(/*! ./Tooltip.js */ "./node_modules/primevue/tooltip/Tooltip.js"); + +/***/ }), + /***/ "./node_modules/primevue/utils/ConnectedOverlayScrollHandler.js": /*!**********************************************************************!*\ !*** ./node_modules/primevue/utils/ConnectedOverlayScrollHandler.js ***! @@ -29241,7 +29567,26 @@ var render = function() { ), _vm._v(" "), _c("InputText", { + directives: [ + { + name: "tooltip", + rawName: "v-tooltip.top", + value: + slotProps.data.param === "required" + ? "This field is required." + : null, + expression: + "\n (slotProps.data.param === 'required') ?\n 'This field is required.' : null\n ", + modifiers: { top: true } + } + ], staticClass: "p-inputtext-sm", + class: { + "p-invalid": !_vm.isValidParam( + slotProps.data.id, + slotProps.data.param + ) + }, attrs: { id: "replace_with__" + slotProps.data.id, type: "text" diff --git a/resources/js/app.ts b/resources/js/app.ts index f25cc13..8aa990f 100644 --- a/resources/js/app.ts +++ b/resources/js/app.ts @@ -35,6 +35,7 @@ import Timeline from 'primevue/timeline'; import ScrollPanel from 'primevue/scrollpanel'; import ConfirmationService from 'primevue/confirmationservice'; import ConfirmDialog from 'primevue/confirmdialog'; +import Tooltip from 'primevue/tooltip'; // Own components import AppHeader from './components/layout/Header.vue'; @@ -83,6 +84,8 @@ Vue.component('Timeline', Timeline); Vue.component('ScrollPanel', ScrollPanel); Vue.component('ConfirmDialog', ConfirmDialog); +Vue.directive('tooltip', Tooltip); + // Layout Vue.component('app-header', AppHeader); Vue.component('app-footer', AppFooter); diff --git a/resources/js/components/Home/Home.ts b/resources/js/components/Home/Home.ts index ac26146..e2ba3c5 100644 --- a/resources/js/components/Home/Home.ts +++ b/resources/js/components/Home/Home.ts @@ -1,10 +1,11 @@ import {Vue, Component, Prop} from 'vue-property-decorator'; import FileUploadResponse from '@/interfaces/responses/FileUploadResponse'; +import { Searcher } from '@/interfaces/Searcher'; @Component export default class Home extends Vue { @Prop({default: []}) - public readonly searchers!: { [key: string]: string; } + public readonly searchers!: Searcher[]; public uiBlocked = false; public uploading = false; @@ -15,6 +16,12 @@ export default class Home extends Vue { }; public error: string = ''; + + public mounted() + { + console.log('SEARCHERS: ', this.searchers); + } + /** * A method which uploads the files to the server for processing * diff --git a/resources/js/components/ProcessFile/ProcessFile.scss b/resources/js/components/ProcessFile/ProcessFile.scss index fbf1a8d..ce07cc2 100644 --- a/resources/js/components/ProcessFile/ProcessFile.scss +++ b/resources/js/components/ProcessFile/ProcessFile.scss @@ -63,4 +63,8 @@ label.switch-label { flex-flow: column; align-items: start; } +} + +.p-tooltip { + z-index: 2004 !important; } \ No newline at end of file diff --git a/resources/js/components/ProcessFile/ProcessFile.ts b/resources/js/components/ProcessFile/ProcessFile.ts index 487b48d..c61e1dc 100644 --- a/resources/js/components/ProcessFile/ProcessFile.ts +++ b/resources/js/components/ProcessFile/ProcessFile.ts @@ -258,7 +258,7 @@ export default class ProcessFile extends Vue { * Create the diff preview for the document */ private createDiffPreview() { - console.log('CREATING DIFF PREVIEW: ', this.processedFileContent); + // console.log('CREATING DIFF PREVIEW: ', this.processedFileContent); this.processedFileContentPreview = this.processedFileContent; let indexes: Array<{ start: number; end: number }> = []; @@ -294,6 +294,18 @@ export default class ProcessFile extends Vue { window.open(`${window.location.origin}/file/download/` + response.path); } + private isValidParam(paramId: string, paramType: string): boolean { + + console.log('PARAM: ', paramId, this.searchersOptions[paramId]); + if ( + paramType === 'required' && + (this.searchersOptions[paramId] === '' || this.searchersOptions[paramId] === undefined) + ) { + return false; + } + return true; + } + /** * Watch the `showDiffHighlight` property for changes * diff --git a/resources/js/components/ProcessFile/ProcessFile.vue b/resources/js/components/ProcessFile/ProcessFile.vue index f6b3879..2e1df06 100644 --- a/resources/js/components/ProcessFile/ProcessFile.vue +++ b/resources/js/components/ProcessFile/ProcessFile.vue @@ -209,7 +209,12 @@ :id="`replace_with__${slotProps.data.id}`" type="text" class="p-inputtext-sm" - v-model="searchersOptions[slotProps.data.id]"/> + v-model="searchersOptions[slotProps.data.id]" + v-tooltip.top=" + (slotProps.data.param === 'required') ? + 'This field is required.' : null + " + :class="{'p-invalid': !isValidParam(slotProps.data.id, slotProps.data.param)}"/> diff --git a/resources/js/interfaces/Searcher.ts b/resources/js/interfaces/Searcher.ts index 4ebb14b..59a5bda 100644 --- a/resources/js/interfaces/Searcher.ts +++ b/resources/js/interfaces/Searcher.ts @@ -1,5 +1,6 @@ export interface Searcher { id: string; name: string, - description: string, + param: string, + type: string; }