* Comment model * Framework, model, policy, presenter, api endpoint etc * Iteration, first pass of UI * fixes, refactors * Comment commands * comment socket support * typing indicators * comment component, styling * wip * right sidebar resize * fix: CMD+Enter submit * Add usePersistedState fix: Main page scrolling on comment highlight * drafts * Typing indicator * refactor * policies * Click thread to highlight Improve comment timestamps * padding * Comment menu v1 * Change comments to use editor * Basic comment editing * fix: Hide commenting button when disabled at team level * Enable opening sidebar without mark * Move selected comment to location state * Add comment delete confirmation * Add comment count to document meta * fix: Comment sidebar togglable Add copy link to comment * stash * Restore History changes * Refactor right sidebar to allow for comment animation * Update to new router best practices * stash * Various improvements * stash * Handle click outside * Fix incorrect placeholder in input fix: Input box appearing on other sessions erroneously * stash * fix: Don't leave orphaned child comments * styling * stash * Enable comment toggling again * Edit styling, merge conflicts * fix: Cannot navigate from insights to comments * Remove draft comment mark on click outside * Fix: Empty comment sidebar, tsc * Remove public toggle * fix: All comments are recessed fix: Comments should not be printed * fix: Associated mark should be removed on comment delete * Revert unused changes * Empty state, basic RTL support * Create dont toggle comment mark * Make it feel more snappy * Highlight active comment in text * fix animation * RTL support * Add reply CTA * Translations
77 lines
1.7 KiB
TypeScript
77 lines
1.7 KiB
TypeScript
import {
|
||
Attachment,
|
||
FileOperation,
|
||
Team,
|
||
User,
|
||
Collection,
|
||
Comment,
|
||
Document,
|
||
Group,
|
||
} from "@server/models";
|
||
import { _abilities, _can, _cannot, _authorize } from "./cancan";
|
||
import "./apiKey";
|
||
import "./attachment";
|
||
import "./authenticationProvider";
|
||
import "./collection";
|
||
import "./comment";
|
||
import "./document";
|
||
import "./fileOperation";
|
||
import "./integration";
|
||
import "./notificationSetting";
|
||
import "./pins";
|
||
import "./searchQuery";
|
||
import "./share";
|
||
import "./star";
|
||
import "./subscription";
|
||
import "./user";
|
||
import "./team";
|
||
import "./group";
|
||
import "./webhookSubscription";
|
||
|
||
type Policy = Record<string, boolean>;
|
||
|
||
// this should not be needed but is a workaround for this TypeScript issue:
|
||
// https://github.com/microsoft/TypeScript/issues/36931
|
||
export const authorize: typeof _authorize = _authorize;
|
||
|
||
export const can = _can;
|
||
|
||
export const cannot = _cannot;
|
||
|
||
export const abilities = _abilities;
|
||
|
||
/*
|
||
* Given a user and a model – output an object which describes the actions the
|
||
* user may take against the model. This serialized policy is used for testing
|
||
* and sent in API responses to allow clients to adjust which UI is displayed.
|
||
*/
|
||
export function serialize(
|
||
model: User,
|
||
target:
|
||
| Attachment
|
||
| Collection
|
||
| Comment
|
||
| FileOperation
|
||
| Team
|
||
| Document
|
||
| User
|
||
| Group
|
||
| null
|
||
): Policy {
|
||
const output = {};
|
||
abilities.forEach((ability) => {
|
||
if (model instanceof ability.model && target instanceof ability.target) {
|
||
let response = true;
|
||
|
||
try {
|
||
response = can(model, ability.action, target);
|
||
} catch (err) {
|
||
response = false;
|
||
}
|
||
|
||
output[ability.action] = response;
|
||
}
|
||
});
|
||
return output;
|
||
}
|