diff --git a/packages/app/src/elements/create-item-dialog.ts b/packages/app/src/elements/create-item-dialog.ts index 0f40f6fc..7c8aa6cf 100644 --- a/packages/app/src/elements/create-item-dialog.ts +++ b/packages/app/src/elements/create-item-dialog.ts @@ -8,6 +8,8 @@ import "./scroller"; import "./button"; import { customElement, query, state } from "lit/decorators.js"; import { css, html } from "lit"; +import "./icon"; +import { checkFeatureDisabled } from "../lib/provisioning"; @customElement("pl-create-item-dialog") export class CreateItemDialog extends Dialog { @@ -23,6 +25,10 @@ export class CreateItemDialog extends Dialog { @state() private _suggestedTemplate: ItemTemplate | null = null; + private get _org() { + return this._vault?.org && app.getOrg(this._vault.org.id); + } + readonly preventDismiss = true; static styles = [ @@ -54,7 +60,7 @@ export class CreateItemDialog extends Dialog { value: v, disabled: !app.isEditable(v), }))} - @change=${() => (this._vault = this._vaultSelect.value)} + @change=${this._vaultSelected} >
${$l("What kind of item you would like to add?")}
@@ -64,7 +70,7 @@ export class CreateItemDialog extends Dialog { (template) => html` (this._template = template)} + @click=${() => this._selectTemplate(template)} .toggled=${this._template === template} > ${template.iconSrc @@ -89,6 +95,43 @@ export class CreateItemDialog extends Dialog { `; } + private _checkAttachmentsDisabled() { + return this._org + ? checkFeatureDisabled(app.getOrgFeatures(this._org).attachments, this._org.isOwner(app.account!)) + : checkFeatureDisabled(app.getAccountFeatures().attachments); + } + + private _checkTotpDisabled() { + return this._org + ? checkFeatureDisabled(app.getOrgFeatures(this._org).totpField, this._org.isOwner(app.account!)) + : checkFeatureDisabled(app.getAccountFeatures().totpField); + } + + private _checkNotesDisabled() { + return this._org + ? checkFeatureDisabled(app.getOrgFeatures(this._org).notesField, this._org.isOwner(app.account!)) + : checkFeatureDisabled(app.getAccountFeatures().notesField); + } + + private _vaultSelected() { + this._vault = this._vaultSelect.value; + this._template = this._suggestedTemplate || ITEM_TEMPLATES[0]; + } + + private _selectTemplate(template: ItemTemplate) { + if (template.attachment && this._checkAttachmentsDisabled()) { + return; + } + if (template.fields.some((field) => field.type === FieldType.Note) && this._checkNotesDisabled()) { + return; + } + if (template.fields.some((field) => field.type === FieldType.Totp) && this._checkTotpDisabled()) { + return; + } + + this._template = template; + } + private async _enter() { const vault = this._vault; diff --git a/packages/app/src/elements/item-view.ts b/packages/app/src/elements/item-view.ts index 00864be9..52846929 100644 --- a/packages/app/src/elements/item-view.ts +++ b/packages/app/src/elements/item-view.ts @@ -171,14 +171,14 @@ export class ItemView extends Routing(StateMixin(LitElement)) { } async addAttachment() { - if (this._checkAttachmentsDiabled()) { + if (this._checkAttachmentsDisabled()) { return; } await this.updateComplete; this._fileInput.click(); } - private _checkAttachmentsDiabled() { + private _checkAttachmentsDisabled() { return this._org ? checkFeatureDisabled(app.getOrgFeatures(this._org).attachments, this._org.isOwner(app.account!)) : checkFeatureDisabled(app.getAccountFeatures().attachments); @@ -685,7 +685,7 @@ export class ItemView extends Routing(StateMixin(LitElement)) { } private async _addFileAttachment(file: File) { - if (this._checkAttachmentsDiabled()) { + if (this._checkAttachmentsDisabled()) { return; }