setupNavigation(); $this->setupUserSettings(); $this->addAssets(); $this->setupFieldMacros(); } /** * Register the Nova routes. */ protected function routes(): void { Nova::routes() ->withAuthenticationRoutes() ->withPasswordResetRoutes() ->register(); } /** * Register the Nova gate. * * This gate determines who can access Nova in non-local environments. */ protected function gate(): void { Gate::define('viewNova', NovaRepo::canViewNova()); Gate::define('viewLogs', fn ($user) => $user->isMe()); Gate::define('downloadLogs', fn ($user) => $user->isMe()); Gate::define('deleteLogs', fn ($user) => $user->isMe()); } /** * Get the dashboards that should be listed in the Nova sidebar. */ protected function dashboards(): array { return [ new Main, ]; } /** * Get the tools that should be listed in the Nova sidebar. */ public function tools(): array { return [ LocaleSwitcher::make() ->setLocales(config('app.locales')) ->onSwitchLocale(NovaRepo::localeSwitcherSave()), ]; } /** * Setup user settings */ public function setupUserSettings(): void { Nova::serving(fn (ServingNova $event) => NovaRepo::serving($event)); } /** * Setup navigation */ public function setupNavigation(): void { Nova::mainMenu(function (Request $request) { return [ MenuSection::dashboard(Main::class)->icon('chart-bar'), MenuSection::make(__('Orders'), [ MenuItem::resource(Order::class), ])->icon('shopping-cart')->collapsedByDefault(), MenuSection::make(__('E-commerce'), [ MenuSection::make(__('Products'), [ MenuItem::resource(Product::class), MenuItem::resource(Review::class), ])->icon('cube'), MenuSection::make(__('Inventory'), [ MenuItem::resource(Inventory::class), MenuItem::resource(InventoryHistoryResource::class), MenuItem::resource(InventoryHistoryRemovedResource::class), ])->icon('office-building'), MenuSection::make(__('Category'), [ MenuItem::resource(Channel::class), MenuItem::resource(Collection::class), MenuItem::resource(Category::class), MenuItem::resource(Brand::class), MenuItem::resource(Attribute::class), ])->icon('color-swatch'), ])->icon('shopping-bag')->collapsedByDefault(), MenuSection::make(__('Users'), [ MenuItem::resource(Seller::class), MenuItem::resource(User::class), ])->icon('users')->collapsedByDefault(), MenuSection::make(__('Global orders'), [ MenuItem::resource(GlobalOrderResource::class), ])->icon('globe')->collapsedByDefault(), MenuSection::make(__('Payouts'), [ MenuItem::resource(PayoutResource::class), ])->icon('credit-card')->collapsedByDefault(), MenuSection::make(__('CMS'), [ MenuGroup::make(__('Media'), [ MenuItem::resource(Banner::class), MenuItem::resource(Carousel::class), MenuItem::resource(Gallery::class), ])->collapsedByDefault(), MenuGroup::make(__('Legal'), [ MenuItem::resource(LegalPage::class), ])->collapsedByDefault(), ])->icon('newspaper')->collapsedByDefault(), MenuSection::make(__('Marketing'), [ MenuItem::resource(NewsletterUser::class), MenuItem::resource(Newsletter::class), MenuItem::resource(Coupon::class), ])->icon('presentation-chart-bar')->collapsedByDefault(), MenuSection::make('Hatlar', [ MenuItem::resource(ContactUS::class), ])->icon('inbox-in')->collapsedByDefault(), MenuSection::make(__('System'), [ MenuGroup::make(__('User'), [ MenuItem::resource(Role::class), MenuItem::resource(Permission::class), ])->collapsedByDefault(), MenuGroup::make(__('Location'), [ MenuItem::resource(Province::class), MenuItem::resource(PostBranch::class), ])->collapsedByDefault(), MenuGroup::make(__('Payment types'), [ MenuItem::resource(PaymentType::class), ])->collapsedByDefault(), MenuGroup::make(__('App'), [ MenuItem::resource(AppVersion::class), ])->collapsedByDefault(), ])->icon('cog')->collapsedByDefault(), ]; }); } /** * Add custom assets */ public function addAssets(): void { Nova::style('additional', public_path('assets/panel/css/additional.css')); Nova::script('additional', public_path('assets/panel/js/additional.js')); } /** * Setup macros of fields */ public function setupFieldMacros(): void { Field::macro('defaultStringRules', function () { $this->rules('required', 'string', 'max:255'); return $this; }); Field::macro('phoneNumberRule', function () { $this->rules('required', 'integer', 'between:61000000,71999999'); return $this; }); Field::macro('turkmenDate', function () { $this->displayUsing(fn ($value) => $value?->format('H:i, d.m.Y')); return $this; }); Field::macro('showWhen', function ($condition) { $condition === true ? $this->show() : $this->hide(); return $this; }); } /** * Register the application's Nova resources. */ protected function resources(): void { Nova::resourcesIn(app_path('Nova')); Nova::resourcesIn(app_path('Modules')); } }