ghost-portal/packages/page-files/src/hooks.ts
badkk 0d0bb48a0c
[Substrate Files] New files module (#6106)
* Upgrade crust-pin to Crust Mainnet

* Update yarn lock

* Files Module (#6)

* Describe file's README

* Change Endpoint name and location

* Update file's README

* Add locales for files

* Files Module (#6)

* Describe file's README

* Change Endpoint name and location

* Update file's README

* Add locales for files

* Update yarn locks file

* Update Crust Pinner to bearer authorization (#7)

* Fix yarn lock

* Add folder support (#8)

* Add folder support

* Fix

* Fix files download

* Fix translation

* Upgrade react component

* Fix ipfs gateway (#9)

* Fix yarnlock

* Upgrade metadata

* Resolve polkadot-js version

* Change copyright

* Fix lint(copyright)

Co-authored-by: Eericxu <2681350846@qq.com>
Co-authored-by: Gavin Fu <gavfu@outlook.com>
Co-authored-by: Yashiro <51014425+yuhui1208@users.noreply.github.com>
2022-02-17 09:25:00 +02:00

47 lines
1.1 KiB
TypeScript

// Copyright 2017-2022 @polkadot/app-files authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { useCallback, useEffect, useMemo, useState } from 'react';
import store from 'store';
import { SaveFile } from './types';
export interface Files {
files: SaveFile[],
}
export interface WrapFiles extends Files {
isLoad: boolean,
setFiles: (files: SaveFile[]) => void
}
const defFilesObj = { files: [], isLoad: true };
export function useFiles (): WrapFiles {
const [filesObj, setFilesObj] = useState<Files>(defFilesObj);
const [isLoad, setIsLoad] = useState(true);
useEffect(() => {
try {
const f = store.get('files', defFilesObj) as Files;
if (f !== defFilesObj) {
setFilesObj(f);
}
setIsLoad(false);
} catch (e) {
setIsLoad(false);
console.error(e);
}
}, []);
const setFiles = useCallback((nFiles: SaveFile[]) => {
const nFilesObj = { ...filesObj, files: nFiles };
setFilesObj(nFilesObj);
store.set('files', nFilesObj);
}, [filesObj]);
return useMemo(() => ({ ...filesObj, isLoad, setFiles }), [filesObj, setFiles, isLoad]);
}