Browse Source

fix: update swagger apis

pull/9323/head
DarkPhoenix2704 2 months ago
parent
commit
7d8f351aa5
  1. 4
      packages/nc-gui/components/dashboard/Sidebar.vue
  2. 1
      packages/nc-gui/composables/useGlobal/types.ts
  3. 63
      packages/nc-gui/composables/useProductFeed.ts
  4. 108
      packages/nocodb/src/schema/swagger.json

4
packages/nc-gui/components/dashboard/Sidebar.vue

@ -5,7 +5,7 @@ const { isWorkspaceLoading } = storeToRefs(workspaceStore)
const { isSharedBase } = storeToRefs(useBase()) const { isSharedBase } = storeToRefs(useBase())
const { isMobileMode } = useGlobal() const { isMobileMode, appInfo } = useGlobal()
const treeViewDom = ref<HTMLElement>() const treeViewDom = ref<HTMLElement>()
@ -60,7 +60,7 @@ onUnmounted(() => {
<GeneralGift v-if="!isEeUI" /> <GeneralGift v-if="!isEeUI" />
<div class="border-t-1 w-full"></div> <div class="border-t-1 w-full"></div>
<DashboardSidebarBeforeUserInfo /> <DashboardSidebarBeforeUserInfo />
<DashboardSidebarFeed /> <DashboardSidebarFeed v-if="appInfo.feedEnabled" />
<DashboardSidebarUserInfo /> <DashboardSidebarUserInfo />
</div> </div>
</div> </div>

1
packages/nc-gui/composables/useGlobal/types.ts

@ -39,6 +39,7 @@ export interface AppInfo {
samlAuthEnabled: boolean samlAuthEnabled: boolean
samlProviderName: string | null samlProviderName: string | null
giftUrl: string giftUrl: string
feedEnabled: boolean
} }
export interface StoredState { export interface StoredState {

63
packages/nc-gui/composables/useProductFeed.ts

@ -1,16 +1,12 @@
import axios from 'axios'
import type { ProductFeedItem } from '../lib/types' import type { ProductFeedItem } from '../lib/types'
const axiosInstance = axios.create({
baseURL: 'https://nocodb.com/api/v1',
headers: {
'Content-Type': 'application/json',
},
})
export const useProductFeed = createSharedComposable(() => { export const useProductFeed = createSharedComposable(() => {
const activeTab = ref('recents') const activeTab = ref('recents')
const { $api } = useNuxtApp()
const { appInfo } = useGlobal()
const youtubeFeed = ref<ProductFeedItem[]>([]) const youtubeFeed = ref<ProductFeedItem[]>([])
const githubFeed = ref<ProductFeedItem[]>([]) const githubFeed = ref<ProductFeedItem[]>([])
@ -23,7 +19,9 @@ export const useProductFeed = createSharedComposable(() => {
social: false, social: false,
}) })
const loadFeed = async ({ loadMore, type }: { loadMore: boolean; type: 'youtube' | 'github' | 'all' | 'twitter' }) => { const newFeedCount = ref(0)
const loadFeed = async ({ loadMore, type }: { loadMore: boolean; type: 'youtube' | 'github' | 'all' }) => {
try { try {
let page = 1 let page = 1
@ -41,15 +39,13 @@ export const useProductFeed = createSharedComposable(() => {
} }
} }
const response = await axiosInstance.get<ProductFeedItem[]>('/social/feed', { const response = await $api.utils.feed2({ page, per_page: 10, type })
params: {
per_page: 10, if (type === 'all' && page === 1 && response.length) {
page, localStorage.setItem('last_published_at', response[0]['Published Time'] as string)
type, }
},
})
return response.data return response
} catch (error) { } catch (error) {
switch (type) { switch (type) {
case 'youtube': case 'youtube':
@ -67,6 +63,39 @@ export const useProductFeed = createSharedComposable(() => {
} }
} }
const checkForNewFeed = async () => {
const lastPublishedAt = localStorage.getItem('last_published_at')
if (!lastPublishedAt) {
return
}
try {
const newFeeds = await $api.utils.feed({ last_published_at: lastPublishedAt })
newFeedCount.value = newFeeds as unknown as number
} catch (error) {
console.error(error)
}
}
const intervalId = ref()
const checkFeedWithInterval = async () => {
await checkForNewFeed()
intervalId.value = setTimeout(checkFeedWithInterval, 3 * 60 * 60 * 1000)
}
onMounted(() => {
if (appInfo.value.feedEnabled) {
checkFeedWithInterval()
}
})
onUnmounted(() => {
if (intervalId) clearTimeout(intervalId.value)
})
return { return {
isErrorOccurred, isErrorOccurred,
activeTab, activeTab,

108
packages/nocodb/src/schema/swagger.json

@ -16015,6 +16015,114 @@
] ]
} }
}, },
"/api/v1/new-feed": {
"get": {
"summary": "Get Feed",
"operationId": "utils-feed",
"parameters": [
{
"schema": {
"type": "string"
},
"name": "last_published_at",
"in": "query",
"required": false
}
],
"responses": {
"200": {
"description": "OK"
},
"400": {
"$ref": "#/components/responses/BadRequest"
}
},
"tags": [
"Utils"
]
}
},
"/api/v1/feed": {
"get": {
"summary": "Get Feed",
"operationId": "utils-feed",
"parameters": [
{
"schema": {
"type": "string",
"enum": [
"all",
"github",
"youtube"
]
},
"name": "type",
"in": "query",
"required": false
},
{
"schema": {
"type": "number"
},
"name": "per_page",
"in": "query",
"required": false
},
{
"schema": {
"type": "number"
},
"name": "page",
"in": "query",
"required": false
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"properties": {
"Id": {
"type": "string"
},
"Description": {
"type": "string"
},
"Tags": {
"type": "string"
},
"Images": {
"type": "array",
"items": {
"type": "object"
}
},
"Url": {
"type": "string"
},
"Published Time": {
"type": "string"
}
}
}
}
}
}
},
"400": {
"$ref": "#/components/responses/BadRequest"
}
},
"tags": [
"Utils"
]
}
},
"/api/v1/aggregated-meta-info": { "/api/v1/aggregated-meta-info": {
"parameters": [ "parameters": [
{ {

Loading…
Cancel
Save