# useCoreTable
Do zarządzania tabelami w projektach bazowych wykorzystywany jest composable useCoreTable. Funkcja ta przyjmuje następujące parametry:
- routeConfig - konfiguracja adresów url,
- config - konfiguracja tabeli, w którym możemy nadpisać następujące parametry:
- initialFetching - decydujemy czy dane powinny się pobierać przy zamontowaniu komponentu (domyślnie na
true) - searchParamName - nazwa parametru po którym przeszukujemy api (domyślnie na
search) - pagination - domyślny obiekt paginacji
- fetchResults - funkcja za pomocą, której pobierane są rekordy z api. Domyślnie wykorzystywana jest funkcja defaultFetchResults, która pobiera dane przy użyciu
routeConfig -> indexApiRoute
- initialFetching - decydujemy czy dane powinny się pobierać przy zamontowaniu komponentu (domyślnie na
- additionalParams - dodatkowe parametry po których chcemy przefiltrować rekordy. Wysyłane w requescie są jako query. Jeżeli podana wartość jest obiektem
refto dane pobierane są ponownie w momencie aktualizacji.
# BaseTable
Razem z composable używany jest komponent BaseTable, który rozszerza komponent QTable (opens new window). Przykład użycia w module User:
<script setup>
const { t } = useLocale();
const routeConfig = useCoreTableRouteConfig({
alias: "user.roles",
path: "/user/roles",
});
const columns = computed(() => [
{
name: "serial_no",
required: true,
label: t("table.columns.lp"),
align: "left",
},
{
name: "name",
required: true,
label: t("table.columns.name"),
align: "left",
field: "name",
sortable: true,
},
{
name: "slug",
required: true,
label: t("table.columns.slug"),
align: "left",
field: "slug",
sortable: true,
},
{
name: "created_at",
required: true,
label: t("table.columns.created_at"),
align: "left",
field: "created_at",
sortable: true,
},
{
name: "actions",
required: true,
label: t("table.columns.actions"),
align: "left",
},
]);
const { state, onRequest, performAction } = useCoreTable(routeConfig, null);
</script>
<template>
<base-table
v-model:pagination="state.pagination"
v-model:filter="state.filter"
:rows="state.results"
:columns="columns"
:loading="state.loading"
:actions="state.actions"
row-key="id"
@request="onRequest"
@perform-action="performAction"
>
<template #top-left>
<div class="full-width">
<q-btn
color="primary"
:label="$t('buttons.create')"
:to="{ name: 'user.roles.create' }"
/>
</div>
</template>
<template v-for="(_, slot) of $slots" #[slot]="scope">
<slot :name="slot" v-bind="scope || {}" />
</template>
</base-table>
</template>
# useCoreTableRouteConfig
Funkcja useCoreTableRouteConfig może być użyta do generowania konfiguracji dla standardowych adresów URL. W przypadku niestandardowych adresów, zaleca się utworzenie osobnej konfiguracji.
# indexApiRoute
Definiowanie ustawień dla adresu URL służącego do pobierania rekordów z API. Domyślnie obiekt wygląda następująco:
const path = "{module}/{plural-model}";
{
indexApiRoute: {
url: path,
queryParams: {},
}
}
Można również tworzyć adres URL poprzez funkcję getUrl, co umożliwia bezpośredni dostęp do route'a:
const path = "{module}/{plural-model}";
{
indexApiRoute: {
getUrl: (route) => `${path}/${route.params.categorySlug}/${route.params.id}`,
queryParams: {},
}
}
# editPageRoute
Na podstawie tych ustawień tworzony jest link do strony edycji. W params podajemy listę parametrów, które mają zostać przekazane do linku. Na podstawie podanej tablicy pobierane są one z danego rekordu (czyli tego, który został aktualnie użyty).
const alias = "{module}.{plural-model}";
{
editPageRoute: {
name: `${alias}.show`,
params: [
{
name: "id",
},
],
}
}
# destroyApiRoute
Tworzenie linku API do usuwania rekordu z bazy danych. Można użyć funkcji getUrl, w której dostępny jest kliknięty rekord. Istnieje również możliwość podania bezpośredniego linku w właściwości url.
const path = "{module}/{plural-model}";
{
destroyApiRoute: {
getUrl: (row) => `${path}/${row.id}`,
queryParams: {},
}
}
# Definiowanie akcji
Domyślnie dostępne są dwie akcje: edycja oraz usuwanie rekordu. Istnieje możliwość całkowitego nadpisania oraz zmergowania z istniejącymi. Akcje przekazywane są poprzez props actions komponentu. Żeby zdecydować czy łączymy z domyślnymi akacjami podajemy props merge-actions jako true lub false.
TIP
Przykład użycia można znaleźć w komponencie modules/media/components/FileTable.vue oraz modules/media/helpers/tables/files.js.