Updated configs and ListItemComponent

This commit is contained in:
noah.lancien 2023-06-23 10:12:50 +00:00 • committed by Vincent BRIDIER
parent d62d9ba7b8
commit 8a890d82d2
7 changed files with 1711 additions and 10055 deletions

View file

@ -10,16 +10,16 @@
],
"overrides": [
{
"files": ["*.ts", "*.vue"],
"rules": {
"no-undef": "off"
}
"files": ["*.ts", "*.vue"],
"rules": {
"no-undef": "off"
}
},
{
"files": ["*.vue"],
"rules": {
"indent": "off"
}
"files": ["*.vue"],
"rules": {
"indent": "off"
}
}
],
"parser": "vue-eslint-parser",
@ -37,5 +37,19 @@
"semi": ["error", "always"],
"vue/script-indent": ["error", 2, { "baseIndent": 0, "switchCase": 1 }],
"vue/one-component-per-file": "off"
},
"settings": {
"import/resolver": {
"node": {
"extensions": [".js", ".vue", ".ts", ".d.ts"]
},
"alias": {
"extensions": [".vue", ".js", ".ts", ".scss", ".d.ts"],
"map": [
["~", "./resources/assets"],
["@", "./node_modules"]
]
}
}
}
}

11627
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -15,55 +15,56 @@
},
"devDependencies": {
"@fancyapps/ui": "^4.0.31",
"@fortawesome/fontawesome-svg-core": "^6.1.2",
"@fortawesome/free-brands-svg-icons": "^6.1.2",
"@fortawesome/free-regular-svg-icons": "^6.1.2",
"@fortawesome/free-solid-svg-icons": "^6.1.2",
"@fortawesome/vue-fontawesome": "^3.0.1",
"@rushstack/eslint-patch": "^1.1.4",
"@fortawesome/fontawesome-svg-core": "^6.4.0",
"@fortawesome/free-brands-svg-icons": "^6.4.0",
"@fortawesome/free-regular-svg-icons": "^6.4.0",
"@fortawesome/free-solid-svg-icons": "^6.4.0",
"@fortawesome/vue-fontawesome": "^3.0.3",
"@rushstack/eslint-patch": "^1.3.2",
"@sipec/vue3-tags-input": "^3.0.4",
"@types/bootstrap": "^5.2.6",
"@types/cropperjs": "^1.3.0",
"@types/leaflet": "^1.9.3",
"@types/toastify-js": "^1.11.1",
"@types/webpack-env": "^1.18.0",
"@typescript-eslint/eslint-plugin": "^5.36.2",
"@typescript-eslint/parser": "^5.36.2",
"@vue/eslint-config-typescript": "^11.0.0",
"axios": "^0.21",
"@types/webpack-env": "^1.18.1",
"@typescript-eslint/eslint-plugin": "^5.60.0",
"@typescript-eslint/parser": "^5.60.0",
"@vue/eslint-config-typescript": "^11.0.3",
"axios": "^0.21.4",
"bootstrap": "^5.2.3",
"clean-webpack-plugin": "^4.0.0",
"cropperjs": "^1.5.12",
"eslint": "^8.23.0",
"eslint-plugin-vue": "^9.4.0",
"cropperjs": "^1.5.13",
"eslint": "^8.43.0",
"eslint-plugin-vue": "^9.15.0",
"eslint-webpack-plugin": "^3.2.0",
"laravel-mix": "^6.0.6",
"laravel-mix": "^6.0.49",
"laravel-mix-clean": "^0.1.0",
"laravel-mix-eslint": "^0.2.0",
"laravel-mix-polyfill": "^3.0.1",
"laravel-mix-stylelint": "^1.0.0",
"postcss": "^8.1.14",
"prettier": "^2.7.1",
"leaflet": "^1.9.4",
"postcss": "^8.4.24",
"postcss-scss": "^4.0.6",
"prettier": "2.8.8",
"print-js": "^1.6.0",
"resolve-url-loader": "^5.0.0",
"sass": "^1.54.8",
"sass": "^1.63.6",
"sass-loader": "^12.6.0",
"slugify": "^1.6.5",
"stylelint": "^14.11.0",
"slugify": "^1.6.6",
"stylelint": "^14.16.1",
"stylelint-config-idiomatic-order": "^8.1.0",
"stylelint-config-sass-guidelines": "^9.0.1",
"stylelint-config-standard-scss": "^6.1.0",
"stylelint-scss": "^4.7.0",
"stylelint-webpack-plugin": "^3.3.0",
"sweetalert2": "^11.4.8",
"sweetalert2": "^11.7.12",
"toastify-js": "^1.12.0",
"ts-loader": "^9.3.1",
"typescript": "^4.8.2",
"ts-loader": "^9.4.3",
"typescript": "^4.9.5",
"typescript-eslint": "^0.0.1-alpha.0",
"vue": "^3.2.38",
"vue-eslint-parser": "^9.1.0",
"vue-loader": "^16.8.3"
},
"dependencies": {
"leaflet": "^1.9.3"
"vue-eslint-parser": "^9.3.1",
"vue-loader": "^16.8.3",
"vue-tsc": "^1.8.1"
}
}

View file

@ -12,11 +12,7 @@
class="table-action"
>
<button
v-if="
displayHeaders.filter((header) => {
return header;
}).length > 1 && itemList.length > 1
"
v-if="hasHeader"
@click.prevent="removeAllHeaders()"
class="btn btn-sm btn-danger"
:title="__('Remove all headers')"
@ -30,11 +26,7 @@
class="col-6 align-middle"
>
{{ __("Header") }}
({{
displayHeaders.filter((header) => {
return header;
}).length
}})
({{ countHeaders }})
</th>
<th
v-for="(column, columnIndex) of itemColumns"
@ -107,7 +99,7 @@
:name="`${inputName}[${String(itemIndex)}][header]`"
type="text"
:placeholder="__('Recipe of chocolate cookies')"
v-model="item['header' as keyof typeof item]"
v-model="item['header']"
>
<FontAwesomeIcon
icon="fa-solid fa-angles-right"
@ -133,7 +125,7 @@
class="form-control form-control-sm"
:name="`${inputName}[${String(itemIndex)}][${column[0]}]`"
:type="itemType[columnIndex]"
v-model="item[column[0] as keyof typeof item]"
v-model="item[column[0]]"
:placeholder="inputPlaceholder[columnIndex]"
:min="itemType[columnIndex] == 'number' ? '0' : undefined"
>
@ -195,7 +187,7 @@ export default defineComponent({
},
mixins: [trans, parseLaravelErrorMessages],
data(): {
itemList: Object[];
itemList: Array<Record<string,string>>;
itemColumns: string[][];
itemLimit: number[];
inputName: string;
@ -207,11 +199,11 @@ export default defineComponent({
displayBtnAdd: boolean;
displayBtnRemove: boolean;
displayHeader: boolean;
displayHeaders: boolean[];
displayHeaders: Array<boolean>;
tooltipList: HTMLButtonElement[];
} {
return {
itemList: [{}],
itemList: [],
itemColumns: [[""]],
itemLimit: [0, 0],
inputName: "",
@ -227,6 +219,18 @@ export default defineComponent({
tooltipList: [],
};
},
computed : {
hasHeader() {
return this.displayHeaders.filter((header : boolean) => {
return header;
}).length > 1 && this.itemList.length > 1;
},
countHeaders() {
return this.displayHeaders.filter((header: boolean) => {
return header;
}).length;
}
},
mounted() {
const json = String(this.$attrs.json ?? "{}");
const data = JSON.parse(json);
@ -258,7 +262,9 @@ export default defineComponent({
}
} else {
this.itemList.forEach((item: { header?: string }, key) => {
if (item.header) this.displayHeaders[key] = true;
if (item.header) {
this.displayHeaders[key] = true;
}
});
}
},

View file

@ -1,4 +1,4 @@
import * as Toastify from "toastify-js";
import Toastify from "toastify-js";
import { Options } from "toastify-js";
export default {

View file

@ -16,6 +16,7 @@
'itemLimit' => $itemLimit ?? [],
'inputName' => $name,
'inputPlaceholder' => $inputPlaceholder,
'header' => $header ?? false,
'errors' => $errors->getBag('default')->getMessages() ?? []
];
@endphp

View file

@ -1,13 +1,22 @@
{
"sourceMap": true,
"compilerOptions": {
"esModuleInterop": true,
"target": "esnext",
"lib": ["es5", "es6", "es2021", "dom", "dom.iterable"],
"module": "esnext",
"strict": true,
"jsx": "preserve",
"moduleResolution": "node",
"typeRoots": ["resources/ts/@types", "node_modules/@types"]
"typeRoots": ["resources/ts/@types", "node_modules/@types"],
"baseUrl": ".",
"paths": {
"~/*": [
"node_modules/*",
"node_modules/@types/*",
],
"@/*": ["resources/assets/*"],
}
},
"include": ["resources/**/*.js", "resources/**/*.ts", "resources/**/*.vue"],
"exclude": ["node_modules"],