mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-11-25 17:33:49 +01:00
147 lines
4.0 KiB
TypeScript
147 lines
4.0 KiB
TypeScript
import {customElement} from "lit/decorators/custom-element.js";
|
|
import {Et2Widget} from "../Et2Widget/Et2Widget";
|
|
import {css, html, LitElement} from "lit";
|
|
import shoelace from "../Styles/shoelace";
|
|
import {Et2VfsSelectDialog} from "../Et2Vfs/Et2VfsSelectDialog";
|
|
import {property} from "lit/decorators/property.js";
|
|
import {Et2Dialog} from "./Et2Dialog";
|
|
import {state} from "lit/decorators/state.js";
|
|
|
|
@customElement("et2-merge-dialog")
|
|
export class Et2MergeDialog extends Et2Widget(LitElement)
|
|
{
|
|
static get styles()
|
|
{
|
|
return [
|
|
super.styles,
|
|
shoelace,
|
|
css`
|
|
:host {
|
|
}
|
|
|
|
et2-details::part(content) {
|
|
display: grid;
|
|
grid-template-columns: repeat(3, 1fr);
|
|
gap: var(--sl-spacing-medium);
|
|
}
|
|
`,
|
|
];
|
|
}
|
|
|
|
@property()
|
|
application : string
|
|
|
|
@property()
|
|
path : string
|
|
|
|
// Can't merge "& send" if no email template selected
|
|
@state()
|
|
canEmail = false;
|
|
|
|
private get dialog() : Et2VfsSelectDialog
|
|
{
|
|
return <Et2VfsSelectDialog><unknown>this.shadowRoot.querySelector("et2-vfs-select-dialog");
|
|
}
|
|
|
|
public async getComplete() : Promise<{
|
|
documents : { path : string, mime : string }[],
|
|
options : { [key : string] : string | boolean }
|
|
}>
|
|
{
|
|
await this.updateComplete;
|
|
const [button, value] = await this.dialog.getComplete();
|
|
|
|
if(!button)
|
|
{
|
|
return {documents: [], options: this.optionValues};
|
|
}
|
|
|
|
const documents = [];
|
|
Array.from(<ArrayLike<string>>value).forEach(value =>
|
|
{
|
|
const fileInfo = this.dialog.fileInfo(value) ?? [];
|
|
documents.push({path: value, mime: fileInfo.mime})
|
|
});
|
|
let options = this.optionValues;
|
|
if(button == Et2Dialog.OK_BUTTON)
|
|
{
|
|
options.download = true;
|
|
}
|
|
return {documents: documents, options: options};
|
|
}
|
|
|
|
public get optionValues()
|
|
{
|
|
const optionValues = {
|
|
download: false
|
|
};
|
|
this.dialog.querySelectorAll(":not([slot='footer'])").forEach(e =>
|
|
{
|
|
if(typeof e.getValue == "function")
|
|
{
|
|
optionValues[e.getAttribute("id")] = e.getValue() === "true" ? true : e.getValue();
|
|
}
|
|
});
|
|
return optionValues;
|
|
}
|
|
|
|
private option(component_name)
|
|
{
|
|
return this.dialog.querySelector("et2-details > [id='" + component_name + "']");
|
|
}
|
|
|
|
protected handleFileSelect(event)
|
|
{
|
|
// Disable PDF checkbox for only email files selected
|
|
let canPDF = false;
|
|
const oldCanEmail = this.canEmail;
|
|
this.canEmail = false;
|
|
|
|
this.dialog.value.forEach(path =>
|
|
{
|
|
if(this.dialog.fileInfo(path).mime !== "message/rfc822")
|
|
{
|
|
canPDF = true;
|
|
}
|
|
else
|
|
{
|
|
this.canEmail = true;
|
|
}
|
|
});
|
|
this.option("pdf").disabled = !canPDF;
|
|
this.requestUpdate("canEmail", oldCanEmail);
|
|
}
|
|
|
|
|
|
render()
|
|
{
|
|
return html`
|
|
<et2-vfs-select-dialog
|
|
class=egw_app_merge_document"
|
|
path=${this.path}
|
|
multiple="true"
|
|
buttonLabel=${this.egw().lang("Download")}
|
|
.title="${this.egw().lang("Insert in document")}"
|
|
.open=${true}
|
|
@et2-select=${this.handleFileSelect}
|
|
>
|
|
${this.canEmail ?
|
|
html`
|
|
<et2-button slot="footer" id="send" label=${this.egw().lang("Merge & send")} image="mail"
|
|
noSubmit="true"></et2-button> ` :
|
|
html`
|
|
<et2-button slot="footer" id="send" label=${this.egw().lang("Merge")} image="etemplate/merge"
|
|
noSubmit="true"></et2-button>`
|
|
}
|
|
<et2-details>
|
|
<span slot="summary">${this.egw().lang("Merge options")}</span>
|
|
<et2-checkbox label=${this.egw().lang("Save as PDF")} id="pdf"></et2-checkbox>
|
|
<et2-checkbox id="link"
|
|
label="${this.egw().lang("Link to each entry")}"
|
|
></et2-checkbox>
|
|
<et2-checkbox label=${this.egw().lang("Merge individually")} id="individual"></et2-checkbox>
|
|
<slot></slot>
|
|
</et2-details>
|
|
</et2-vfs-select-dialog>`;
|
|
}
|
|
} |