33 lines
810 B
JavaScript
33 lines
810 B
JavaScript
/**
|
|
* Board Channels Composable
|
|
* Shared state + helpers for mapping board tags to Slack channels.
|
|
*/
|
|
export function useBoardChannels() {
|
|
const channels = useState('board.channels', () => [])
|
|
|
|
async function fetchChannels() {
|
|
const result = await $fetch('/api/board/channels')
|
|
channels.value = result?.channels || []
|
|
return channels.value
|
|
}
|
|
|
|
function resolveTagChannel(tagSlugs = []) {
|
|
if (!tagSlugs?.length) return null
|
|
return (
|
|
channels.value.find((channel) =>
|
|
(channel.tagSlugs || []).some((slug) => tagSlugs.includes(slug))
|
|
) || null
|
|
)
|
|
}
|
|
|
|
function slackUrl(channelId) {
|
|
return `https://gammaspace.slack.com/archives/${channelId}`
|
|
}
|
|
|
|
return {
|
|
channels: readonly(channels),
|
|
fetchChannels,
|
|
resolveTagChannel,
|
|
slackUrl,
|
|
}
|
|
}
|