para-bridge-demo
Version:
a bridge api for js-ios/andriod rest
59 lines (49 loc) • 1.6 kB
text/typescript
import { BridgePlugin } from '../bridge';
import { get } from 'para-utils';
type permissionNames = 'location' | 'storage' | 'telephone' | 'camera' | 'sms' | 'contacts';
type QueryPermissionItems = {
[index in permissionNames]?: boolean;
};
interface IQueryPermissionParam {
names?: permissionNames[];
}
interface IQueryPermissionItems {
name: permissionNames;
isOpen: 'true' | 'false';
}
interface IQueryPermissionResult {
// NTV 版本号 6.0.1
version: string;
// 返回的权限列表+状态
permissions: IQueryPermissionItems[];
}
export class QueryPermission<K> extends BridgePlugin<IQueryPermissionParam, K>{
protected get ntvPluginName() {
return "_ntv_util_query_permission";
}
protected get availableMinVersion() {
return "1.0.0";
}
protected bridgeExecChrome(pluginName: string | undefined): void {
// 可针对不同运行环境实现特定的调用逻辑来MOCK,弥补平台差异性.
throw new Error('QueryPermission() 未针对当前环境实现');
}
}
/**
* 查询应用权限是否打开
* @param names 指定查询的权限名称
* @returns 返回对象
*/
export const queryPermission = (...names: permissionNames[]) => {
return new QueryPermission<IQueryPermissionResult>({ names }).invokeOnce().then(result => {
const cbData = result.cbData;
const newResult: QueryPermissionItems = {};
get(cbData, 'permissions', []).forEach((item: IQueryPermissionItems) => {
newResult[item.name] = Boolean(item.isOpen);
});
return {
version: cbData.version,
permissions: newResult,
}
});
}