Add option to control user's experimental features (#111)

* Add option to control user's experimental features

* Don't use ReferenceManyField, load experimental features manually

* cleanup

* Move experimental features to their own components, improve UI

* remove background from Stack

* update readme
This commit is contained in:
Borislav Pantaleev
2024-11-06 11:25:47 +02:00
committed by GitHub
parent 86b4987b7f
commit cd1ca7c039
6 changed files with 130 additions and 8 deletions

View File

@@ -248,9 +248,16 @@ export interface UploadMediaResult {
content_uri: string;
}
export interface ExperimentalFeaturesModel {
features: {
[key: string]: boolean;
};
}
export interface SynapseDataProvider extends DataProvider {
deleteMedia: (params: DeleteMediaParams) => Promise<DeleteMediaResult>;
uploadMedia: (params: UploadMediaParams) => Promise<UploadMediaResult>;
updateFeatures: (id: Identifier, features: ExperimentalFeaturesModel) => Promise<void>;
}
const resourceMap = {
@@ -798,6 +805,17 @@ const baseDataProvider: SynapseDataProvider = {
});
return json as UploadMediaResult;
},
getFeatures: async (id: Identifier) => {
const base_url = storage.getItem("base_url");
const endpoint_url = `${base_url}/_synapse/admin/v1/experimental_features/${encodeURIComponent(returnMXID(id))}`;
const { json } = await jsonClient(endpoint_url);
return json.features as ExperimentalFeaturesModel;
},
updateFeatures: async (id: Identifier, features: ExperimentalFeaturesModel) => {
const base_url = storage.getItem("base_url");
const endpoint_url = `${base_url}/_synapse/admin/v1/experimental_features/${encodeURIComponent(returnMXID(id))}`;
await jsonClient(endpoint_url, { method: "PUT", body: JSON.stringify({ features }) });
},
};
const dataProvider = withLifecycleCallbacks(baseDataProvider, [