|
1 | 1 | <template> |
2 | 2 | <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@1.0.4/css/bulma.min.css" /> |
3 | 3 | <DefaultMain :primary-text="'Projetos'" :second-text="'Organize seu trabalho em projetos'"> |
4 | | - <CreateButton :name="name" @open-modal="crudOperation" /> |
5 | | - <List :list="projectsList" @edit="crudOperation" @delete="crudOperation" /> |
| 4 | + <CreateButton :name="name" @open-modal="handleCrudOperation" /> |
| 5 | + <List :list="projectsList" @edit="handleCrudOperation" @delete="handleCrudOperation" /> |
6 | 6 | <ModalForm |
7 | 7 | :class="{ 'is-active': showEditOrCreateModal }" |
8 | 8 | :inputData="projectNameModal" |
|
16 | 16 | </template> |
17 | 17 |
|
18 | 18 | <script lang="ts"> |
19 | | -import { deleteGenericEndPoint, getGenericEndPoint } from '@/api' |
| 19 | +import { defineComponent, ref, onMounted } from 'vue' |
20 | 20 | import DefaultMain from '@/components/DefaultMain.vue' |
21 | 21 | import List from '@/components/List.vue' |
22 | | -import type { IProjects } from '@/interfaces.ts/projects.interface' |
23 | | -import { defineComponent } from 'vue' |
24 | 22 | import CreateButton from '../components/CreateButton.vue' |
25 | 23 | import ModalForm from '@/components/ModalForm.vue' |
| 24 | +import { getGenericEndPoint } from '@/api/api' |
| 25 | +import { useCrudOperations } from '@/api/utils/crud-operations' |
| 26 | +import type { IProjects } from '@/interfaces.ts/projects.interface' |
26 | 27 |
|
27 | 28 | export default defineComponent({ |
28 | 29 | name: 'ProjectsPage', |
29 | | - components: { |
30 | | - DefaultMain, |
31 | | - List, |
32 | | - CreateButton, |
33 | | - ModalForm, |
34 | | - }, |
35 | | - data() { |
| 30 | + components: { DefaultMain, List, CreateButton, ModalForm }, |
| 31 | + setup() { |
| 32 | + const projectsList = ref<IProjects[]>([]) |
| 33 | + const showEditOrCreateModal = ref(false) |
| 34 | + const projectNameModal = ref('') |
| 35 | + const projectIdModal = ref('') |
| 36 | + const event = ref('') |
| 37 | + const name = 'projeto' |
| 38 | +
|
| 39 | + const { handleCrudOperation } = useCrudOperations<IProjects>('projects', { |
| 40 | + listRef: projectsList, |
| 41 | + onEdit: (item) => { |
| 42 | + event.value = 'edit' |
| 43 | + projectNameModal.value = item.name |
| 44 | + projectIdModal.value = item.id |
| 45 | + showEditOrCreateModal.value = true |
| 46 | + }, |
| 47 | + onCreate: () => { |
| 48 | + event.value = 'create' |
| 49 | + projectIdModal.value = '' |
| 50 | + projectNameModal.value = '' |
| 51 | + showEditOrCreateModal.value = true |
| 52 | + }, |
| 53 | + }) |
| 54 | +
|
| 55 | + const updateListWithNewCreatedData = (data: IProjects) => { |
| 56 | + projectsList.value.push(data) |
| 57 | + showEditOrCreateModal.value = false |
| 58 | + } |
| 59 | +
|
| 60 | + const updateListWithNewUpdatedData = (data: IProjects) => { |
| 61 | + const index = projectsList.value.findIndex((p) => p.id === data.id) |
| 62 | + if (index !== -1) projectsList.value[index].name = data.name |
| 63 | + showEditOrCreateModal.value = false |
| 64 | + } |
| 65 | +
|
| 66 | + onMounted(async () => { |
| 67 | + projectsList.value = await getGenericEndPoint('projects') |
| 68 | + }) |
| 69 | +
|
36 | 70 | return { |
37 | | - projectsList: [] as IProjects[], |
38 | | - name: 'projeto', |
39 | | - showEditOrCreateModal: false, |
40 | | - projectNameModal: '', |
41 | | - projectIdModal: '', |
42 | | - event: '', |
| 71 | + projectsList, |
| 72 | + showEditOrCreateModal, |
| 73 | + projectNameModal, |
| 74 | + projectIdModal, |
| 75 | + event, |
| 76 | + name, |
| 77 | + handleCrudOperation, |
| 78 | + updateListWithNewCreatedData, |
| 79 | + updateListWithNewUpdatedData, |
43 | 80 | } |
44 | 81 | }, |
45 | | - methods: { |
46 | | - async crudOperation(data: Record<string, any>) { |
47 | | - console.log({ data }) |
48 | | - switch (data.event) { |
49 | | - case 'delete': |
50 | | - await deleteGenericEndPoint('projects', data.item.id) |
51 | | - this.projectsList = this.projectsList.filter((project) => project.id != data.item.id) |
52 | | - break |
53 | | - case 'edit': |
54 | | - this.event = data.event |
55 | | - this.projectNameModal = data.item.name |
56 | | - this.projectIdModal = data.item.id |
57 | | - this.showEditOrCreateModal = true |
58 | | - break |
59 | | - case 'create': |
60 | | - this.event = data.event |
61 | | - this.projectIdModal = '' |
62 | | - this.projectNameModal = '' |
63 | | - this.showEditOrCreateModal = true |
64 | | - break |
65 | | - } |
66 | | - }, |
67 | | - updateListWithNewCreatedData(data: IProjects) { |
68 | | - this.projectsList.push(data) |
69 | | - this.showEditOrCreateModal = false |
70 | | - }, |
71 | | - updateListWithNewUpdatedData(data: IProjects) { |
72 | | - this.projectsList = this.projectsList.filter((project) => { |
73 | | - if (project.id === data.id) { |
74 | | - project.name = data.name |
75 | | - } |
76 | | - return project |
77 | | - }) |
78 | | - this.showEditOrCreateModal = false |
79 | | - }, |
80 | | - }, |
81 | | - async created() { |
82 | | - this.projectsList = await getGenericEndPoint('projects') |
83 | | - }, |
84 | 82 | }) |
85 | 83 | </script> |
86 | 84 |
|
|
0 commit comments