// Local import { MediaList } from 'jodit/modules/widget/search-selector/MediaList'; // Third Party import { createApi } from 'unsplash-js'; import { MediaItem } from 'jodit/modules/widget/search-selector/MediaItem'; import type { Basic } from 'unsplash-js/dist/methods/photos/types'; const nodeFetch = require('node-fetch'); // Variable Section export const unsplashApi = createApi({ accessKey: '1xrBCfio58yQDy39-MQxsm8_ZG1nSacRlmfI0bcIKK0', fetch: nodeFetch }); // Main Section export class ImageMediaList extends MediaList { // constructor( // editor: IJodit, // callbacks: ImageSelectorCallbacks, // text: string, // close: () => void // ) { // super(editor, callbacks, text, close); // } // override async search(): Promise { // let dataMediaItems: Basic[] | undefined; // if (!this.searchWord.length) { // const { response } = await unsplashApi.photos.list({ // page: ++this.page, // perPage: this.perPage // }); // dataMediaItems = response?.results; // } else { // const { response } = await unsplashApi.search.getPhotos({ // query: this.searchWord, // page: ++this.page, // perPage: this.perPage // }); // dataMediaItems = response?.results; // } // this.createMediaItems(dataMediaItems); // return dataMediaItems; // } override async fetchData(): Promise { try { let dataMediaItems: Basic[] | undefined; let page = 0; // append type이면 페이지 + 1, 아니면 페이지 초기화 // append type은 스크롤해서 밑으로 내릴때 if (this.mediaDataUpdateType === 'append') page = ++this.page; else this.page = 0; if (this.searchWord.length) { const { response } = await unsplashApi.search.getPhotos({ query: this.searchWord, page, perPage: this.perPage }); dataMediaItems = response?.results; } else { const { response } = await unsplashApi.photos.list({ page, perPage: this.perPage }); dataMediaItems = response?.results; } if (dataMediaItems) { return dataMediaItems; } return []; } catch (error) { console.log(error); return []; } } override createMediaItems(dataMediaItems: Basic[]): MediaItem[] { return dataMediaItems?.map( result => new MediaItem( this.editor, { url: result?.urls?.small, width: result.width, height: result.height }, result?.urls?.full, result?.alt_description, this.close, result.user, result?.links?.download_location ) ); } }