diff --git a/src/app/Http/Controllers/Customer/CustomerEquipmentController.php b/src/app/Http/Controllers/Customer/CustomerEquipmentController.php index 4f323606a..164b9b9d0 100755 --- a/src/app/Http/Controllers/Customer/CustomerEquipmentController.php +++ b/src/app/Http/Controllers/Customer/CustomerEquipmentController.php @@ -24,19 +24,19 @@ public function __construct(protected CustomerEquipmentService $svc) {} public function index(Request $request, Customer $customer): Response { return Inertia::render('Customer/Equipment/Index', [ - 'alerts' => fn() => $customer->Alerts, - 'allowVpn' => fn() => config('customer.allow_vpn_data'), - 'availableEquipment' => fn() => CacheData::equipmentCategorySelectBox(), - 'customer' => fn() => $customer, - 'permissions' => fn() => UserPermissions::customerPermissions($request->user()), - 'siteList' => fn() => $customer->Sites->makeVisible(['href']), - 'vpnData' => fn() => $customer->CustomerVpn, + 'alerts' => fn () => $customer->Alerts, + 'allowVpn' => fn () => config('customer.allow_vpn_data'), + 'availableEquipment' => fn () => CacheData::equipmentCategorySelectBox(), + 'customer' => fn () => $customer, + 'permissions' => fn () => UserPermissions::customerPermissions($request->user()), + 'siteList' => fn () => $customer->Sites->makeVisible(['href']), + 'vpnData' => fn () => $customer->CustomerVpn, /** * Deferred Props */ 'groupedEquipmentList' => Inertia::defer( - fn() => $customer->Equipment + fn () => $customer->Equipment ->load('Sites') ->groupBy('equip_name') ->chunk(25) @@ -63,20 +63,20 @@ public function store(CustomerEquipmentRequest $request, Customer $customer): Re public function show(Request $request, Customer $customer, CustomerEquipment $equipment): Response { return Inertia::render('Customer/Equipment/Show', [ - 'alerts' => fn() => $customer->Alerts, - 'allowVpn' => fn() => config('customer.allow_vpn_data'), - 'permissions' => fn() => UserPermissions::customerPermissions($request->user()), - 'customer' => fn() => $customer, - 'equipment' => fn() => $equipment, - 'siteList' => fn() => $equipment->Sites->makeVisible(['href']), - 'equipment-data' => fn() => $equipment->CustomerEquipmentData, - 'noteList' => fn() => $equipment->getNotes(), - 'fileList' => fn() => $equipment->getFiles(), - 'fileTypes' => fn() => CacheData::fileTypes(), - 'vpnData' => fn() => $customer->CustomerVpn, + 'alerts' => fn () => $customer->Alerts, + 'allowVpn' => fn () => config('customer.allow_vpn_data'), + 'permissions' => fn () => UserPermissions::customerPermissions($request->user()), + 'customer' => fn () => $customer, + 'equipment' => fn () => $equipment, + 'siteList' => fn () => $equipment->Sites->makeVisible(['href']), + 'equipment-data' => fn () => $equipment->CustomerEquipmentData, + 'noteList' => fn () => $equipment->getNotes(), + 'fileList' => fn () => $equipment->getFiles(), + 'fileTypes' => fn () => CacheData::fileTypes(), + 'vpnData' => fn () => $customer->CustomerVpn, // Deferred props - 'equipmentList' => Inertia::defer(fn() => $customer->Equipment->load('Sites')), + 'equipmentList' => Inertia::defer(fn () => $customer->Equipment->load('Sites')), ]); } diff --git a/src/app/Http/Controllers/Customer/CustomerSiteController.php b/src/app/Http/Controllers/Customer/CustomerSiteController.php index 0662e4629..cf0e8ecf3 100755 --- a/src/app/Http/Controllers/Customer/CustomerSiteController.php +++ b/src/app/Http/Controllers/Customer/CustomerSiteController.php @@ -22,11 +22,11 @@ public function __construct(protected CustomerService $svc) {} public function index(Request $request, Customer $customer): Response { return Inertia::render('Customer/Site/Index', [ - 'alerts' => fn() => $customer->Alerts, - 'customer' => fn() => $customer, - 'permissions' => fn() => UserPermissions::customerPermissions($request->user()), - 'siteList' => fn() => $customer->Sites->makeVisible(['href']), - 'isFav' => fn() => $customer->isFav($request->user()), + 'alerts' => fn () => $customer->Alerts, + 'customer' => fn () => $customer, + 'permissions' => fn () => UserPermissions::customerPermissions($request->user()), + 'siteList' => fn () => $customer->Sites->makeVisible(['href']), + 'isFav' => fn () => $customer->isFav($request->user()), ]); } @@ -38,8 +38,8 @@ public function create(?Customer $customer = null): Response $this->authorize('create', CustomerSite::class); return Inertia::render('Customer/Site/Create', [ - 'default-state' => fn() => config('customer.default_state'), - 'parent-customer' => fn() => $customer, + 'default-state' => fn () => config('customer.default_state'), + 'parent-customer' => fn () => $customer, ]); } @@ -61,34 +61,34 @@ public function store(CustomerSiteRequest $request, ?Customer $customer = null): public function show(Request $request, Customer $customer, CustomerSite $site): Response { return Inertia::render('Customer/Site/Show', [ - 'alerts' => fn() => $customer->Alerts, - 'allowShareVpn' => fn() => config('customer.allow_share_vpn_data'), - 'allowVpn' => fn() => config('customer.allow_vpn_data'), - 'availableEquipment' => fn() => CacheData::equipmentCategorySelectBox(), - 'customer' => fn() => $customer, - 'currentSite' => fn() => $site, - 'fileTypes' => fn() => CacheData::fileTypes(), - 'isFav' => fn() => $customer->isFav($request->user()), - 'permissions' => fn() => UserPermissions::customerPermissions( + 'alerts' => fn () => $customer->Alerts, + 'allowShareVpn' => fn () => config('customer.allow_share_vpn_data'), + 'allowVpn' => fn () => config('customer.allow_vpn_data'), + 'availableEquipment' => fn () => CacheData::equipmentCategorySelectBox(), + 'customer' => fn () => $customer, + 'currentSite' => fn () => $site, + 'fileTypes' => fn () => CacheData::fileTypes(), + 'isFav' => fn () => $customer->isFav($request->user()), + 'permissions' => fn () => UserPermissions::customerPermissions( $request->user() ), - 'phoneTypes' => fn() => CacheData::phoneTypes(), - 'siteList' => fn() => $customer->Sites->makeVisible(['href']), + 'phoneTypes' => fn () => CacheData::phoneTypes(), + 'siteList' => fn () => $customer->Sites->makeVisible(['href']), /** * Deferred Props */ - 'contactList' => Inertia::defer(fn() => $site->SiteContact), - 'equipmentList' => Inertia::defer(fn() => $site->SiteEquipment->load('Sites')), - 'fileList' => Inertia::defer(fn() => $site->SiteFile->append('href')), + 'contactList' => Inertia::defer(fn () => $site->SiteContact), + 'equipmentList' => Inertia::defer(fn () => $site->SiteEquipment->load('Sites')), + 'fileList' => Inertia::defer(fn () => $site->SiteFile->append('href')), 'groupedEquipmentList' => Inertia::defer( - fn() => $site->SiteEquipment + fn () => $site->SiteEquipment ->load('Sites') ->groupBy('equip_name') ->chunk(5) ), - 'noteList' => Inertia::defer(fn() => $site->SiteNote), - 'vpnData' => Inertia::defer(fn() => $customer->CustomerVpn), + 'noteList' => Inertia::defer(fn () => $site->SiteNote), + 'vpnData' => Inertia::defer(fn () => $customer->CustomerVpn), ]); } @@ -97,9 +97,9 @@ public function edit(Customer $customer, CustomerSite $site): Response $this->authorize('update', $site); return Inertia::render('Customer/Site/Edit', [ - 'default-state' => fn() => config('customer.default_state'), - 'parent-customer' => fn() => $customer, - 'site' => fn() => $site, + 'default-state' => fn () => config('customer.default_state'), + 'parent-customer' => fn () => $customer, + 'site' => fn () => $site, ]); } diff --git a/src/app/Services/Maintenance/LogUtilitiesService.php b/src/app/Services/Maintenance/LogUtilitiesService.php index 993af6920..66e31c6c2 100755 --- a/src/app/Services/Maintenance/LogUtilitiesService.php +++ b/src/app/Services/Maintenance/LogUtilitiesService.php @@ -59,7 +59,7 @@ public function validateLogChannel(string $channel): string|false public function validateLogFile(string $channel, string $filename): string|bool { $folder = $this->validateLogChannel($channel); - $relativePath = $folder . DIRECTORY_SEPARATOR . $filename . '.log'; + $relativePath = $folder.DIRECTORY_SEPARATOR.$filename.'.log'; if (! Storage::disk('logs')->exists($relativePath)) { return false; diff --git a/src/config/version.yml b/src/config/version.yml index 0157ba944..43e983bb4 100755 --- a/src/config/version.yml +++ b/src/config/version.yml @@ -4,17 +4,17 @@ current: label: v major: 8 minor: 0 - patch: 2 + patch: 4 prerelease: null buildmetadata: null - commit: '921' + commit: 92b timestamp: year: 2025 - month: 6 + month: 7 day: 28 - hour: 3 - minute: 32 - second: 15 + hour: 2 + minute: 0 + second: 23 timezone: UTC commit: mode: git-local diff --git a/src/package-lock.json b/src/package-lock.json index 520c3d48c..d12cc6f91 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -43,7 +43,7 @@ "yup": "^1.6" }, "devDependencies": { - "axios": "^1.6", + "axios": "^1.11", "chokidar": "^3.6", "laravel-echo": "^1.16.1", "laravel-vite-plugin": "^1.0", @@ -1248,6 +1248,60 @@ "node": ">=14.0.0" } }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.4.3", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.0.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.4.3", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.10", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.9.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/tslib": { + "version": "2.8.0", + "inBundle": true, + "license": "0BSD", + "optional": true + }, "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { "version": "4.1.10", "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.10.tgz", @@ -1556,13 +1610,13 @@ "license": "MIT" }, "node_modules/axios": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz", - "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", + "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", + "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, @@ -1948,9 +2002,9 @@ } }, "node_modules/form-data": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz", - "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", diff --git a/src/package.json b/src/package.json index 538a734f9..097179654 100644 --- a/src/package.json +++ b/src/package.json @@ -6,7 +6,7 @@ "dev": "vite" }, "devDependencies": { - "axios": "^1.6", + "axios": "^1.11", "chokidar": "^3.6", "laravel-echo": "^1.16.1", "laravel-vite-plugin": "^1.0", diff --git a/src/resources/css/app.css b/src/resources/css/app.css index 3f34d12b6..3aa1de0cd 100755 --- a/src/resources/css/app.css +++ b/src/resources/css/app.css @@ -1,4 +1,4 @@ -@import 'tailwindcss'; +@import "tailwindcss"; @config '../../tailwind.config.js'; @@ -11,19 +11,22 @@ color utility to any element that depends on these defaults. */ @layer base { - *, - ::after, - ::before, - ::backdrop, - ::file-selector-button { - border-color: var(--color-gray-200, currentcolor); - } + *, + ::after, + ::before, + ::backdrop, + ::file-selector-button { + border-color: var(--color-gray-200, currentcolor); + } } .pointer { cursor: pointer; } +.mask-field { + @apply blur-xs hover:blur-none; +} /** * Classes to quickly set Card Component sizes @@ -93,7 +96,7 @@ } .text-warning { - @apply text-yellow-500 + @apply text-yellow-500; } .text-muted { @@ -107,7 +110,6 @@ .text-danger { @apply text-red-600; } - } /** diff --git a/src/resources/js/Components/Customer/Show/CustomerAlerts.vue b/src/resources/js/Components/Customer/Show/CustomerAlerts.vue index 2cfbfdda7..32ff3e7b4 100755 --- a/src/resources/js/Components/Customer/Show/CustomerAlerts.vue +++ b/src/resources/js/Components/Customer/Show/CustomerAlerts.vue @@ -9,7 +9,7 @@ import { getStatusIcon, getStatusType } from "@/Composables/styleData.module"; - - diff --git a/src/resources/js/Components/Customer/Show/Equipment/ManageEquipment.vue b/src/resources/js/Components/Customer/Show/Equipment/ManageEquipment.vue index fc66f38d2..9d090e0a7 100755 --- a/src/resources/js/Components/Customer/Show/Equipment/ManageEquipment.vue +++ b/src/resources/js/Components/Customer/Show/Equipment/ManageEquipment.vue @@ -1,15 +1,23 @@ diff --git a/src/resources/js/Components/Customer/Show/ManageCustomer.vue b/src/resources/js/Components/Customer/Show/ManageCustomer.vue index 6b19eb345..3df730a1c 100755 --- a/src/resources/js/Components/Customer/Show/ManageCustomer.vue +++ b/src/resources/js/Components/Customer/Show/ManageCustomer.vue @@ -42,11 +42,7 @@ const isDisableSiteAllowed = (): boolean => { const managementOptions = computed(() => { const options = []; - if ( - allowVpn.value && - permissions.value.equipment.create && - vpnData.value == null - ) { + if (allowVpn.value && vpnData.value == null) { options.push({ label: "Add VPN Data", command: () => vpnModal.value?.show(), diff --git a/src/resources/js/Components/Customer/Show/Notes/CustomerNotes.vue b/src/resources/js/Components/Customer/Show/Notes/CustomerNotes.vue index 3ec12969b..eccf3cffb 100755 --- a/src/resources/js/Components/Customer/Show/Notes/CustomerNotes.vue +++ b/src/resources/js/Components/Customer/Show/Notes/CustomerNotes.vue @@ -108,6 +108,12 @@ const addRoute = computed(() => { return route("customers.notes.create", customer.value.slug); }); + +const getRowBg = (row: customerNote): string | void => { + if (row.urgent) { + return "bg-red-200"; + } +};