diff --git a/app/Console/Commands/Vuex.php b/app/Console/Commands/Vuex.php new file mode 100644 index 0000000..62b03ad --- /dev/null +++ b/app/Console/Commands/Vuex.php @@ -0,0 +1,111 @@ +get($baseDefaultPath . $moduleFile . '.text'); + $data = static::replacer($data); + Storage::disk('local')->put($basePath . $moduleFile . '.js', $data); + + } + } + } + + public static function createRepositoryFile () { + $baseRepositoryPath = 'modules/wm-' . static::$module . '/resources/js/abstraction/repositories/' . static::$storeModule . '/' . static::$storeModule . 'Repository.js'; + $baseDefaultPath = static::$isCategory ? 'resources/js/Default/abstraction/repositories/categoryRepository.text' : 'resources/js/Default/abstraction/repositories/repository.text'; + + if (static::hasExists($baseRepositoryPath)) { + $data = Storage::disk('local')->get($baseDefaultPath); + $data = static::replacer($data); + Storage::disk('local')->put($baseRepositoryPath, $data); + } + } + + public static function createResourceFile() { + $baseResourcePath = 'modules/wm-' . static::$module . '/resources/js/abstraction/resources/' . static::$storeModule . '/' . static::$storeModule . 'Resource.js'; + $baseDefaultPath = static::$isCategory ? 'resources/js/Default/abstraction/resources/categoryResource.text' : 'resources/js/Default/abstraction/resources/resource.text'; + + if (static::hasExists($baseResourcePath)) { + $data = Storage::disk('local')->get($baseDefaultPath); + $data = static::replacer($data); + Storage::disk('local')->put($baseResourcePath, $data); + } + } + public static function createStorageFile() { + $baseStoragePath = 'modules/wm-' . static::$module . '/resources/js/services/' . static::$storeModule . '.storage.js'; + $baseDefaultPath = 'resources/js/Default/services/storage.text'; + + if (static::hasExists($baseStoragePath)) { + $data = Storage::disk('local')->get($baseDefaultPath); + $data = static::replacer($data); + Storage::disk('local')->put($baseStoragePath, $data); + } + } + + private static function hasExists($path) { + $continue = true; + if (Storage::disk('local')->exists($path)) { + $continue = static::$replace; + } + return $continue; + } + + private static function replacer($data) { + $data = str_replace('|-module-|', Str::snake(static::$storeModule), $data); + $data = str_replace('|-Module-|', Str::title(static::$storeModule), $data); + $data = str_replace('|-MODULE-|', Str::upper(static::$storeModule), $data); + $data = str_replace('|-BaseModule-|', Str::title(static::$module), $data); + return str_replace('|-baseModule-|', Str::camel(static::$module), $data); + } +} diff --git a/app/Console/Commands/VuexBuild.php b/app/Console/Commands/VuexBuild.php index 4663428..247ae7d 100644 --- a/app/Console/Commands/VuexBuild.php +++ b/app/Console/Commands/VuexBuild.php @@ -2,10 +2,9 @@ namespace App\Console\Commands; +use App\Console\Commands\Vuex; use App\Services\MorphModelFinder; use Illuminate\Console\Command; -use Illuminate\Support\Facades\Storage; -use Illuminate\Support\Str; class VuexBuild extends Command { @@ -14,14 +13,15 @@ class VuexBuild extends Command * * @var string */ - protected $signature = 'make:vuex {module} {store-module} {--category}'; + protected $signature = 'make:vuex {module} {store-module} {--category} {--replace}'; + /** * The console command description. * * @var string */ - protected $description = 'Create a vuex modules'; + protected $description = 'Create a vuex modules module store-module --category --replace'; /** * @var MorphModelFinder @@ -46,43 +46,9 @@ class VuexBuild extends Command */ public function handle(): void { - $isCategory = $this->option('category'); - $module = $this->argument('module'); - $storeModule = $this->argument('store-module'); - $moduleFiles = ['actions.js', 'mutations.js', 'state.js', 'getters.js']; - - $baseRepositoryPath = 'modules/wm-' . $module . '/resources/js/abstraction/repositories/' . $storeModule; - $baseResourcePath = 'modules/wm-' . $module . '/resources/js/abstraction/resources/' . $storeModule; - - $baseActionPath = 'modules/wm-' . $module . '/resources/js/store/modules/' . $storeModule . '/'; - $baseDefaultActionPath = 'resources/js/Default/store/store/'; - - - - -// $name = $this->choice( -// 'file exist, Do yo really Replace File?', -// ['Taylor', 'Dayle'], -// 'Dayle' -// ); - - if ($storeModule && $module) { - foreach ($moduleFiles as $moduleFile) { - if (Storage::disk('local')->exists($baseActionPath . $moduleFile)) { - if ($this->confirm('file exist, Do yo really Replace File?', true)) { - $data = Storage::disk('local')->get($baseDefaultActionPath . $moduleFile); - $data = str_replace('|-module-|', Str::snake($storeModule), $data); - $data = str_replace('|-Module-|', Str::title($storeModule), $data); - $data = str_replace('|-MODULE-|', Str::upper($storeModule), $data); - $data = str_replace('|-BaseModule-|', Str::title($module), $data); - $data = str_replace('|-baseModule-|', Str::camel($module), $data); - Storage::disk('local')->put($baseActionPath . $moduleFile, $data); - } - } - } - } - + Vuex::initialize($this->arguments(), $this->options())->createAllFiles(); $this->info('modules Store Created'); } + } diff --git a/resources/js/Default/abstraction/repositories/categoryRepository.text b/resources/js/Default/abstraction/repositories/categoryRepository.text new file mode 100644 index 0000000..ebdee75 --- /dev/null +++ b/resources/js/Default/abstraction/repositories/categoryRepository.text @@ -0,0 +1,54 @@ +import {setData, getJson, getArray} from '@|-BaseModule-|/abstraction/resources/productCategory/|-module-|CategoryResource' +import axios from "axios"; +import url from "@|-Module-|/router/urls"; + +export default class |-module-|CategoryRepository { + + async index() { + + let response = await axios.get(url('url')); + + if (response && response.status === 200) { + + return getArray(response.data.data); + + } + } + + async store(data) { + + const params = setData(data); + + let response = await axios.post(url('url'), params); + + if (response && response.status === 201) { + + return getJson(response.data.data); + + } + } + + async update(data) { + + const params = setData(data, true); + + let response = await axios.post(url('url', {|-module-|Category: data.id}), params); + + if (response && response.status === 200) { + + return getJson(response.data.data); + + } + } + + async destroy(dataId) { + let response = await axios.delete(url('url', {|-module-|Category: dataId})); + + if (response && response.status === 200) { + + return true; + + } + } + +} diff --git a/resources/js/Default/abstraction/repositories/repository.text b/resources/js/Default/abstraction/repositories/repository.text new file mode 100644 index 0000000..8b7407c --- /dev/null +++ b/resources/js/Default/abstraction/repositories/repository.text @@ -0,0 +1,82 @@ +import {setQuery, setData, getJson, getArray} from "@|-BaseModule-|/abstraction/repositories/|-module-|Recource"; +import axios from "axios"; +import url from "@|-BaseModule-|/router/urls"; + +export default class |-Module-|Repository { + + + async index(data) { + + const params = setQuery(data); + + let response = await axios.get(url('url'), {params}); + + if (response && response.status === 200) { + + return getArray(response.data); + + } + } + + async store(data) { + + const params = setData(data); + + let response = await axios.post(url('url'), params); + + if (response && response.status === 201) { + + return getJson(response.data); + + } + } + + async update(data) { + + const params = setData(data, true); + + let response = await axios.post(url('url', {|-module-|: data.id}), params); + + if (response && response.status === 200) { + + return getJson(response.data.data); + + } + } + + async show(dataId) { + + let response = await axios.get(url('url', {|-module-|: dataId})); + + if (response && response.status === 200) { + + return getJson(response.data.data); + + } + + } + + async destroy(dataId) { + + let response = await axios.delete(url('url', {|-module-|: dataId})); + + if (response && response.status === 200) { + + return true; + + } + } + + async destroyList(dataIds) { + + let response = await axios.delete(url('url'), {params: {ids: dataIds}}); + + if (response && response.status === 200) { + + return true; + + } + + } + +} diff --git a/resources/js/Default/abstraction/resources/categoryResource.text b/resources/js/Default/abstraction/resources/categoryResource.text new file mode 100644 index 0000000..25460f2 --- /dev/null +++ b/resources/js/Default/abstraction/resources/categoryResource.text @@ -0,0 +1,32 @@ +import {SetQueries} from "@Global/utils/common/CreateQueriesObject"; +import {objectToFormData} from "@Global/utils/object-to-formdata"; +import {addToTags} from "@Global/utils/common/addToTags"; + + +const getJson = (data) => { + return { + ...data, + }; +}; + +const getArray = (data) => { + return data.map((Item) => (getJson(Item))); +}; + + +const setQuery = (data) => { + return SetQueries(data); +}; + + +const setData = (data, hasUpdate = false) => { + //data = addToTags(data, ['name', 'name_en']); + return objectToFormData( + { + ...data, + _method: hasUpdate ? 'put' : 'post' + } + ); +}; + +export {setData, setQuery, getArray, getJson}; diff --git a/resources/js/Default/abstraction/resources/resource.text b/resources/js/Default/abstraction/resources/resource.text new file mode 100644 index 0000000..db0e6ec --- /dev/null +++ b/resources/js/Default/abstraction/resources/resource.text @@ -0,0 +1,32 @@ +import {SetQueries, SetPagination} from "@Global/utils/common/CreateQueriesObject"; +import {objectToFormData} from "@Global/utils/object-to-formdata"; + + +const getJson = (data) => { + return { + ...data, + }; +}; + +const getArray = ({data, meta}) => { + const pagination = SetPagination(meta); + data = data.map((Item) => (getJson(Item))); + return {data, pagination}; +}; + + +const setQuery = (data) => { + return SetQueries(data); +}; + + +const setData = (data, hasUpdate = false) => { + return objectToFormData( + { + ...data, + _method: hasUpdate ? 'put' : 'post' + } + ); +}; + +export {setData, setQuery, getArray, getJson}; diff --git a/resources/js/Default/services/storage.text b/resources/js/Default/services/storage.text new file mode 100644 index 0000000..51efb36 --- /dev/null +++ b/resources/js/Default/services/storage.text @@ -0,0 +1,42 @@ +import { Paginate, Sort } from '@Global/services/storage.|-module-|'; +const |-MODULE-| = '|-module-|'; + +const |-Module-|Paginate = { + get() { + return Paginate.get(|-MODULE-|); + }, + getWithDefault() { + if(this.get()) { + return this.get(); + } + return { + page: 1, + pageCount: 1, + pageStart: 1, + pageStop: 1, + itemsLength: 1, + itemsPerPage: 12, + }; + }, + save(paginate) { + return Paginate.save(|-MODULE-|, paginate); + }, + remove() { + return Paginate.remove(|-MODULE-|); + }, +} + +const SortPaginate = { + get() { + return Sort.get(|-MODULE-|); + }, + save() { + return Sort.save(|-MODULE-|); + }, + remove() { + return Sort.remove(|-MODULE-|); + }, +} + + +export { |-Module-|Paginate, SortPaginate } diff --git a/resources/js/Default/store/category/actions.text b/resources/js/Default/store/category/actions.text index 2708df2..61e7e96 100644 --- a/resources/js/Default/store/category/actions.text +++ b/resources/js/Default/store/category/actions.text @@ -6,9 +6,8 @@ export default { async load|-Module-|({ commit, state }) { try { commit("SET_LOADING", true); - const |-module-| = await repository.index({pagination: state.pagination, filters: state.filters}); - commit("SET_|-MODULE-|", |-module-|.data); - commit("SET_|-MODULE-|_PAGINATION", |-module-|.pagination); + const |-module-| = await repository.index(); + commit("SET_|-MODULE-|", |-module-|); return |-module-|; } catch (e) { return e; @@ -16,13 +15,6 @@ export default { commit("SET_LOADING", false); } }, - async show|-Module-|({}, |-module-|Id) { - try { - return await repository.show(|-module-|Id); - } catch (e) { - return e; - } - }, async store|-Module-|({ commit }, data) { try { const |-module-| = await repository.store(data); diff --git a/resources/js/Default/store/category/getters.text b/resources/js/Default/store/category/getters.text index cb2c597..d3d2339 100644 --- a/resources/js/Default/store/category/getters.text +++ b/resources/js/Default/store/category/getters.text @@ -1,7 +1,14 @@ export default { + getList|-Module-|: state => { + if (state.has_filter) { + return state.filtered_|-module-|; + } + return state.|-module-|; + }, get|-Module-|: state => state.|-module-|, + isFiltered|-Module-|: state =>state.is_filtered, + getFilter|-Module-|: state =>state.filter, get|-Module-|Loading: state => state.loading, - get|-Module-|Pagination: state => state.pagination, get|-Module-|Selected: state => state.selected, }; diff --git a/resources/js/Default/store/category/mutations.text b/resources/js/Default/store/category/mutations.text index 9bdb8c0..4ebe587 100644 --- a/resources/js/Default/store/category/mutations.text +++ b/resources/js/Default/store/category/mutations.text @@ -1,20 +1,15 @@ import Vue from 'vue'; -//import { |-module-|Paginate } from "@|-BaseModule-|/services/localStorage/|-module-|.storage" +import {addIndexTreeToList} from '@Global/utils/common/ProcessTreeArray'; export default { SET_|-MODULE-|(state, |-module-|) { - Vue.set(state, '|-module-|', |-module-|); + Vue.set(state, '|-module-|', addIndexTreeToList(|-module-|)); }, UPDATE_|-MODULE-|(state, |-module-|) { const index = state.|-module-|.findIndex(x => x.id === |-module-|.id); - |-module-| = {...state.|-module-|[index], ...|-module-|}; - Vue.set(state.|-module-|, index, |-module-|); - }, - - SET_|-MODULE-|_PAGINATION(state, pagination) { - Vue.set(state, "pagination", pagination); - //|-module-|Paginate.save(pagination); + Vue.set(state.|-module-|, index, |-module-|); + Vue.set(state, '|-module-|', addIndexTreeToList(state.|-module-|)); }, REMOVE_|-MODULE-|(state, id) { @@ -22,15 +17,12 @@ export default { const selectedIndex = state.|-module-|_selected.findIndex(x => x.id === id); Vue.delete(state.|-module-|, Index); Vue.delete(state.|-module-|_selected, selectedIndex); - Vue.set(state.pagination, 'itemsLength', state.pagination.itemsLength - 1); - Vue.set(state.pagination, 'pageStop', state.pagination.pageStop - 1); + Vue.set(state, '|-module-|', addIndexTreeToList(state.|-module-|)); }, ADD_|-MODULE-|(state, |-module-|) { - state.|-module-|.unshift(|-module-|); - Vue.set(state, '|-module-|', state.|-module-|); - Vue.set(state.pagination, 'itemsLength', state.pagination.itemsLength + 1); - Vue.set(state.pagination, 'pageStop', state.pagination.pageStop + 1); + Vue.set(state.|-module-|, state.|-module-|.length, |-module-|); + Vue.set(state, '|-module-|', addIndexTreeToList(state.|-module-|)) }, ADD_|-MODULE-|_SELECTED(state, |-module-|Id) { @@ -39,10 +31,15 @@ export default { }, SET_FILTER_|-MODULE-|(state, value) { - state.filters = value; + Vue.set(state, 'filtered_|-module-|', value); + Vue.set(state, 'has_filter', true); }, + RESET_FILTERED_|-MODULE-|(state, value) { + Vue.set(state, 'filtered_|-module-|', [value]); + Vue.set(state, 'is_filter', false); + }, SET_LOADING(state, value) { state.loading = value; - } + }, }; diff --git a/resources/js/Default/store/category/state.text b/resources/js/Default/store/category/state.text index 9b4b885..90c9f79 100644 --- a/resources/js/Default/store/category/state.text +++ b/resources/js/Default/store/category/state.text @@ -1,14 +1,19 @@ -//import { |-module-|Paginate } from "@|-BaseModule-|/services/localStorage/|-module-|.storage"; - export default { module_info:{ name: '|-module-|', module: '|-baseModule-|', }, + filter: [], + is_filtered: false, |-module-|: [], + filtered_|-module-|: [], |-module-|_selected: [], - //pagination: newsPaginate.getWithDefault(), loading: false, - filters:{}, + default_category: { + id: null, + name: "بدون دسته بندی", + name_en: "No Category", + type: "default" + } }; diff --git a/resources/js/Default/store/store/actions.js b/resources/js/Default/store/store/actions.text similarity index 100% rename from resources/js/Default/store/store/actions.js rename to resources/js/Default/store/store/actions.text diff --git a/resources/js/Default/store/store/getters.js b/resources/js/Default/store/store/getters.text similarity index 100% rename from resources/js/Default/store/store/getters.js rename to resources/js/Default/store/store/getters.text diff --git a/resources/js/Default/store/store/mutations.js b/resources/js/Default/store/store/mutations.text similarity index 100% rename from resources/js/Default/store/store/mutations.js rename to resources/js/Default/store/store/mutations.text diff --git a/resources/js/Default/store/store/state.js b/resources/js/Default/store/store/state.text similarity index 100% rename from resources/js/Default/store/store/state.js rename to resources/js/Default/store/store/state.text