diff options
Diffstat (limited to 'lib/admin/src/channels')
-rw-r--r-- | lib/admin/src/channels/computedChannels.ts | 65 | ||||
-rw-r--r-- | lib/admin/src/channels/index.ts | 3 | ||||
-rw-r--r-- | lib/admin/src/channels/useChannels.ts (renamed from lib/admin/src/channels/channels.ts) | 51 |
3 files changed, 32 insertions, 87 deletions
diff --git a/lib/admin/src/channels/computedChannels.ts b/lib/admin/src/channels/computedChannels.ts deleted file mode 100644 index dbf7cd5..0000000 --- a/lib/admin/src/channels/computedChannels.ts +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (C) 2023 Vaughn Nugent -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see <https://www.gnu.org/licenses/>. - -import { apiCall } from '@vnuge/vnlib.browser'; -import { Ref, computed, ref, watch } from 'vue' -import { find, isEmpty, isEqual } from 'lodash-es'; -import { BlogChannel, ChannelApi, ComputedBlogApi, BlogAdminContext } from '../types.js' -import { useChannels } from './channels.js'; - -export interface ComputedChannels extends ChannelApi, ComputedBlogApi<BlogChannel> { - readonly editChannel: Readonly<Ref<BlogChannel | undefined>>; -} - -/** - * Create a computed channels object to manage channels - * @param channelUrl the path to the channel api - * @returns The computed channels object - */ -export const useComputedChannels = (context: BlogAdminContext): ComputedChannels => { - - const channels = useChannels(context) - const { channel, channelEdit } = context.getQuery() - - const items = ref<BlogChannel[]>([]); - - const loadChannels = async () => { - items.value = await apiCall(channels.getChannels) ?? []; - } - - const selectedItem = computed<BlogChannel | undefined>(() => { - return find(items.value, c => isEqual(c.id, channel.value)); - }); - - const editChannel = computed<BlogChannel | undefined>(() => { - return find(items.value, c => isEqual(c.id, channelEdit.value)); - }) - - //Initial load - loadChannels(); - - //Load channels when the edit id changes to empty - watch(channelEdit, (newId) => isEmpty(newId) ? loadChannels() : null); - - return { - ...channels, - items, - selectedItem, - editChannel, - selectedId:channel, - getQuery: context.getQuery, - } -} - diff --git a/lib/admin/src/channels/index.ts b/lib/admin/src/channels/index.ts index d45eb72..8a14ab3 100644 --- a/lib/admin/src/channels/index.ts +++ b/lib/admin/src/channels/index.ts @@ -13,5 +13,4 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. -export * from './channels' -export * from './computedChannels'
\ No newline at end of file +export * from './useChannels'
\ No newline at end of file diff --git a/lib/admin/src/channels/channels.ts b/lib/admin/src/channels/useChannels.ts index 3efb6b7..b9201b3 100644 --- a/lib/admin/src/channels/channels.ts +++ b/lib/admin/src/channels/useChannels.ts @@ -13,7 +13,7 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. -import { isEqual, toSafeInteger } from 'lodash-es'; +import { isArray, isEqual, toSafeInteger } from 'lodash-es'; import { BlogChannel, ChannelFeed, ChannelApi, BlogAdminContext } from '../types.js' /** @@ -31,29 +31,40 @@ export const useChannels = (context: BlogAdminContext): ChannelApi => { return channel; } - const getChannels = async (): Promise<BlogChannel[]> => { - const { data } = await axios.get(getUrl()); - return data; - } - const deleteChannel = async (channel: BlogChannel) => { //Call delete with the channel id query await axios.delete(`${getUrl()}?channel=${channel.id}`); } - const addChannel = async (channel: BlogChannel, feed?: ChannelFeed): Promise<BlogChannel> => { - //Clone the item to avoid modifying the original - const add = sanitizeNumbers({ ...channel, feed }); - //Call post with the channel data - return await axios.post(getUrl(), add); - } - - const updateChannel = async (channel: BlogChannel, feed?: ChannelFeed): Promise<BlogChannel> => { - //Manually assign the feed or null, and clone the item to avoid modifying the original - const update = sanitizeNumbers({ ...channel, feed }); - //Call put with the channel data - return await axios.patch(getUrl(), update); - } + return { + async getAllItems() { + const { data } = await axios.get(getUrl()); + return data; + }, + + async add(item: BlogChannel, feed?: ChannelFeed) { + //Clone the item to avoid modifying the original + const add = sanitizeNumbers({ ...item, feed }); + //Call post with the channel data + return await axios.post(getUrl(), add); + }, - return { getChannels, deleteChannel, addChannel, updateChannel }; + async update(item: BlogChannel, feed?: ChannelFeed){ + //Manually assign the feed or null, and clone the item to avoid modifying the original + const update = sanitizeNumbers({ ...item, feed }); + //Call put with the channel data + return await axios.patch(getUrl(), update); + }, + + async delete(item: BlogChannel | BlogChannel[]){ + //invoke delete for each item + if(isArray(item)){ + await Promise.all(item.map(deleteChannel)); + } + else{ + //Call delete with the channel id query + await deleteChannel(item) + } + }, + }; } |