mirror of
https://github.com/gristlabs/grist-core.git
synced 2026-03-02 04:09:24 +00:00
(core) add per-user per-org preferences to database
Summary: Adds preferences to orgs. There are a few flavors: * `userOrgPrefs`: these are specific to a certain user and a certain org. * `orgPrefs`: these are specific to a certain org, and apply to all users. * `userPrefs`: these are specific to a certain user, and apply to all orgs. The three flavors of prefs are reported by `GET` for an org, and can be modified by `PATCH` for an org. The user needs to have UPDATE rights to change `orgPrefs`, but can change `userOrgPrefs` and `userPrefs` without that right since the settings only affect themselves. Test Plan: added tests Reviewers: dsagal Reviewed By: dsagal Differential Revision: https://phab.getgrist.com/D2572
This commit is contained in:
9
app/common/Prefs.ts
Normal file
9
app/common/Prefs.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
// A collection of preferences related to a user or org (or combination).
|
||||
export interface Prefs {
|
||||
// TODO replace this with real preferences.
|
||||
placeholder?: string;
|
||||
}
|
||||
|
||||
export type UserPrefs = Prefs;
|
||||
export type UserOrgPrefs = Prefs;
|
||||
export type OrgPrefs = Prefs;
|
||||
@@ -7,6 +7,7 @@ import {DocCreationInfo} from 'app/common/DocListAPI';
|
||||
import {Features} from 'app/common/Features';
|
||||
import {isClient} from 'app/common/gristUrls';
|
||||
import {FullUser} from 'app/common/LoginSessionAPI';
|
||||
import {OrgPrefs, UserOrgPrefs, UserPrefs} from 'app/common/Prefs';
|
||||
import * as roles from 'app/common/roles';
|
||||
import {addCurrentOrgToPath} from 'app/common/urlUtils';
|
||||
|
||||
@@ -31,8 +32,13 @@ export const commonPropertyKeys = ['createdAt', 'name', 'updatedAt'];
|
||||
|
||||
export interface OrganizationProperties extends CommonProperties {
|
||||
domain: string|null;
|
||||
// Organization includes preferences relevant to interacting with its content.
|
||||
userOrgPrefs?: UserOrgPrefs; // Preferences specific to user and org
|
||||
orgPrefs?: OrgPrefs; // Preferences specific to org (but not a particular user)
|
||||
userPrefs?: UserPrefs; // Preferences specific to user (but not a particular org)
|
||||
}
|
||||
export const organizationPropertyKeys = [...commonPropertyKeys, 'domain'];
|
||||
export const organizationPropertyKeys = [...commonPropertyKeys, 'domain',
|
||||
'orgPrefs', 'userOrgPrefs', 'userPrefs'];
|
||||
|
||||
// Basic information about an organization, excluding the user's access level
|
||||
export interface OrganizationWithoutAccessInfo extends OrganizationProperties {
|
||||
@@ -232,6 +238,7 @@ export interface UserAPI {
|
||||
renameOrg(orgId: number|string, name: string): Promise<void>;
|
||||
renameWorkspace(workspaceId: number, name: string): Promise<void>;
|
||||
renameDoc(docId: string, name: string): Promise<void>;
|
||||
updateOrg(orgId: number|string, props: Partial<OrganizationProperties>): Promise<void>;
|
||||
updateDoc(docId: string, props: Partial<DocumentProperties>): Promise<void>;
|
||||
deleteOrg(orgId: number|string): Promise<void>;
|
||||
deleteWorkspace(workspaceId: number): Promise<void>; // delete workspace permanently
|
||||
@@ -384,6 +391,13 @@ export class UserAPIImpl extends BaseAPI implements UserAPI {
|
||||
return this.updateDoc(docId, {name});
|
||||
}
|
||||
|
||||
public async updateOrg(orgId: number|string, props: Partial<OrganizationProperties>): Promise<void> {
|
||||
await this.request(`${this._url}/api/orgs/${orgId}`, {
|
||||
method: 'PATCH',
|
||||
body: JSON.stringify(props)
|
||||
});
|
||||
}
|
||||
|
||||
public async updateDoc(docId: string, props: Partial<DocumentProperties>): Promise<void> {
|
||||
await this.request(`${this._url}/api/docs/${docId}`, {
|
||||
method: 'PATCH',
|
||||
|
||||
Reference in New Issue
Block a user