Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .woodpecker/buildSlackNotify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ set -x

COMMIT_SHORT_SHA=$(echo $CI_COMMIT_SHA | cut -c1-8)

STATUS=${1}

if [ "$CI_STEP_STATUS" = "success" ]; then

if [ "$STATUS" = "success" ]; then
MESSAGE="Did a build without issues on \`$CI_REPO_NAME/$CI_COMMIT_BRANCH\`. Commit: _${CI_COMMIT_MESSAGE}_ (<$CI_COMMIT_URL|$COMMIT_SHORT_SHA>)"

curl -s -X POST -H "Content-Type: application/json" -d '{
Expand Down
31 changes: 24 additions & 7 deletions .woodpecker/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,25 +16,42 @@ steps:
commands:
- infisical export --domain https://vault.devforth.io/api --format=dotenv-export --env="prod" > /woodpecker/deploy.vault.env

release:
build:
image: node:20
when:
- event: push
commands:
- apt update && apt install -y rsync
- export $(cat /woodpecker/deploy.vault.env | xargs)
- . /woodpecker/deploy.vault.env
- npm clean-install
- /bin/bash ./.woodpecker/buildRelease.sh
- npm audit signatures

release:
image: node:20
when:
- event:
- push
branch:
- main
commands:
- . /woodpecker/deploy.vault.env
- npx semantic-release

slack-on-failure:
image: curlimages/curl
when:
- event: push
status: [failure, success]
- event: push
status: [failure]
commands:
- . /woodpecker/deploy.vault.env
- /bin/sh ./.woodpecker/buildSlackNotify.sh failure

slack-on-success:
image: curlimages/curl
when:
- event: push
status: [success]
commands:
- export $(cat /woodpecker/deploy.vault.env | xargs)
- /bin/sh ./.woodpecker/buildSlackNotify.sh

- . /woodpecker/deploy.vault.env
- /bin/sh ./.woodpecker/buildSlackNotify.sh success
105 changes: 26 additions & 79 deletions custom/InlineList.vue
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
v-if="checkboxes.length"
v-for="(action,i) in listResource?.options?.bulkActions"
:key="action.id"
@click="startBulkAction(action.id)"
@click="startBulkActionInner(action.id)"
class="flex gap-1 items-center py-1 px-3 text-sm font-medium text-gray-900 focus:outline-none bg-white rounded-default border border-gray-300 hover:bg-gray-100 hover:text-lightPrimary focus:z-10 focus:ring-4 focus:ring-gray-100 dark:focus:ring-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700"
:class="{
'bg-red-100 text-red-800 border-red-400 dark:bg-red-700 dark:text-red-400 dark:border-red-400': action.state==='danger',
Expand Down Expand Up @@ -106,8 +106,8 @@
:threeDotsDropdownItems="listResourceData?.options?.pageInjections?.list?.threeDotsDropdownItems"
:bulkActions="listResourceData?.bulkActions"
:checkboxes="checkboxes"
@startBulkAction="startBulkAction"
:updateList="getList"
@startBulkAction="startBulkActionInner"
:updateList="getListInner"
:clearCheckboxes="clearCheckboxes"
></ThreeDotsMenu>

Expand All @@ -120,20 +120,23 @@
@update:page="page = $event"
@update:sort="sort = $event"
@update:checkboxes="checkboxes = $event"
@update:records="getList"
@update:records="getListInner"

:sort="sort"
:pageSize="pageSize"
:totalRows="totalRows"
:checkboxes="checkboxes"
:customActionsInjection="listResource?.options?.pageInjections?.list?.customActionIcons"
:tableBodyStartInjection="listResource?.options?.pageInjections?.list?.tableBodyStart"
:customActionIconsThreeDotsMenuItems="listResource?.options?.pageInjections?.list?.customActionIconsThreeDotsMenuItems"
:tableRowReplaceInjection="listResource?.options?.pageInjections?.list?.tableRowReplace"
/>

</td>
</template>

<script setup>
import { callAdminForthApi } from '@/utils';
import { callAdminForthApi, getList, startBulkAction } from '@/utils';
import { ref, onMounted, watch, computed, nextTick } from 'vue';
import ResourceListTable from '@/components/ResourceListTable.vue';
import Filters from '@/components/Filters.vue';
Expand Down Expand Up @@ -254,92 +257,34 @@ const createIsAllowed = computed(() => {
});

watch([page], async () => {
await getList();
await getListInner();
});

watch([sort], async () => {
await getList();
await getListInner();
}, {deep: true});

watch([filters], async () => {
page.value = 1;
checkboxes.value = [];
await getList();
await getListInner();
}, {deep: true});

const bulkActionLoadingStates = ref({});

async function startBulkAction(actionId) {
const action = listResource.value.options.bulkActions.find(a => a.id === actionId);
if (action.confirm) {
const confirmed = await adminforth.confirm({
message: action.confirm,
});
if (!confirmed) {
return;
}
}
bulkActionLoadingStates.value[actionId] = true;

const data = await callAdminForthApi({
path: `/plugin/${props.meta.pluginInstanceId}/start_bulk_action`,
method: 'POST',
body: {
resourceId: listResource.value.resourceId,
actionId: actionId,
recordIds: checkboxes.value
}
});
bulkActionLoadingStates.value[actionId] = false;

if (data?.ok) {
checkboxes.value = [];
await getList();

if (data.successMessage) {
adminforth.alert({
message: data.successMessage,
variant: 'success'
});
}
}
if (data?.error) {
showErrorTost(data.error);
}
async function startBulkActionInner(actionId) {
await startBulkAction(actionId, listResource.value, checkboxes, bulkActionLoadingStates, getListInner);
}

async function getList() {
rows.value = null;
if( !listResource.value ){
return;
async function getListInner() {
rows.value = null; // to show loading state
const result = await getList(listResource.value, true, page.value, pageSize.value, sort.value, checkboxes, endFilters.value);
if (!result) {
return { error: 'No result returned from getList' };
}
const data = await callAdminForthApi({
path: '/get_resource_data',
method: 'POST',
body: {
source: 'list',
resourceId: listResource.value.resourceId,
limit: pageSize.value,
offset: (page.value - 1) * pageSize.value,
filters: endFilters.value,
sort: sort.value,
}
});

if (data.error) {
showErrorTost(data.error);
rows.value = [];
totalRows.value = 0;
return;
}
listResourceData.value = data;
rows.value = data.data?.map(row => {
row._primaryKeyValue = row[listResource.value.columns.find(c => c.primaryKey).name];
return row;
});
totalRows.value = data.total;

await nextTick();
rows.value = result.rows;
totalRows.value = result.totalRows ?? 0;
return { error: result.error };
}

async function getDefaultFilters() {
Expand All @@ -364,9 +309,11 @@ onMounted( async () => {
}
const foreighResourceId = props.meta.foreignResourceId;
listResource.value = (await callAdminForthApi({
path: `/plugin/${props.meta.pluginInstanceId}/get_resource`,
path: `/get_resource`,
method: 'POST',
body: {},
body: {
resourceId: foreighResourceId,
},
})).resource;

if (listResource.value?.options?.allowedActions?.create && listResourceRefColumn.value && !listResourceRefColumn.value.showIn.create) {
Expand All @@ -385,7 +332,7 @@ onMounted( async () => {
await getDefaultFilters();
}

await getList();
await getListInner();
filtersStore.setFilters(endFilters.value);
});

Expand Down
Loading