- ${when(this.collection?.thumbnail, (t) => thumbnail(t))}
- ${thumbnail(Thumbnail.Cyan)} ${thumbnail(Thumbnail.Green)}
- ${thumbnail(Thumbnail.Yellow)} ${thumbnail(Thumbnail.Orange)}
-
- `;
- }
-
private readonly renderShareLink = () => {
return html`
@@ -499,142 +239,4 @@ export class ShareCollection extends BtrixElement {
`;
};
-
- private async updateVisibility(access: CollectionAccess) {
- const prevValue = this.collection?.access;
-
- // Optimistic update
- if (this.collection) {
- this.collection = { ...this.collection, access };
- }
-
- try {
- await this.api.fetch<{ updated: boolean }>(
- `/orgs/${this.orgId}/collections/${this.collectionId}`,
- {
- method: "PATCH",
- body: JSON.stringify({ access }),
- },
- );
-
- this.dispatchEvent(new CustomEvent("btrix-change"));
-
- this.notify.toast({
- id: "collection-visibility-update-status",
- message: msg("Collection visibility updated."),
- variant: "success",
- icon: "check2-circle",
- });
- } catch (err) {
- console.debug(err);
-
- // Revert optimistic update
- if (this.collection && prevValue !== undefined) {
- this.collection = { ...this.collection, access: prevValue };
- }
-
- this.notify.toast({
- id: "collection-visibility-update-status",
- message: msg("Sorry, couldn't update visibility at this time."),
- variant: "danger",
- icon: "exclamation-octagon",
- });
- }
- }
-
- async updateThumbnail({
- defaultThumbnailName,
- }: {
- defaultThumbnailName: Thumbnail | null;
- }) {
- const prevValue = this.collection?.defaultThumbnailName;
-
- // Optimistic update
- if (this.collection) {
- this.collection = { ...this.collection, defaultThumbnailName };
- }
-
- try {
- await this.api.fetch<{ updated: boolean }>(
- `/orgs/${this.orgId}/collections/${this.collectionId}`,
- {
- method: "PATCH",
- body: JSON.stringify({ defaultThumbnailName }),
- },
- );
-
- this.dispatchEvent(new CustomEvent("btrix-change"));
-
- this.notify.toast({
- id: "collection-thumbnail-update-status",
- message: msg("Thumbnail updated."),
- variant: "success",
- icon: "check2-circle",
- });
- } catch (err) {
- console.debug(err);
-
- // Revert optimistic update
- if (this.collection && prevValue !== undefined) {
- this.collection = {
- ...this.collection,
- defaultThumbnailName: prevValue,
- };
- }
-
- this.notify.toast({
- id: "collection-thumbnail-update-status",
- message: msg("Sorry, couldn't update thumbnail at this time."),
- variant: "danger",
- icon: "exclamation-octagon",
- });
- }
- }
-
- async updateAllowDownload(allowPublicDownload: boolean) {
- const prevValue = this.collection?.allowPublicDownload;
-
- // Optimistic update
- if (this.collection) {
- this.collection = { ...this.collection, allowPublicDownload };
- }
-
- try {
- await this.api.fetch<{ updated: boolean }>(
- `/orgs/${this.orgId}/collections/${this.collectionId}`,
- {
- method: "PATCH",
- body: JSON.stringify({ allowPublicDownload }),
- },
- );
-
- this.dispatchEvent(new CustomEvent("btrix-change"));
-
- this.notify.toast({
- id: "collection-allow-public-download-update-status",
- message: allowPublicDownload
- ? msg("Download button enabled.")
- : msg("Download button hidden."),
- variant: "success",
- icon: "check2-circle",
- });
- } catch (err) {
- console.debug(err);
-
- // Revert optimistic update
- if (this.collection && prevValue !== undefined) {
- this.collection = {
- ...this.collection,
- allowPublicDownload: prevValue,
- };
- }
-
- this.notify.toast({
- id: "collection-allow-public-download-update-status",
- message: msg("Sorry, couldn't update download button at this time."),
- variant: "danger",
- icon: "exclamation-octagon",
- });
- }
- }
}
diff --git a/frontend/src/features/crawl-workflows/workflow-editor.ts b/frontend/src/features/crawl-workflows/workflow-editor.ts
index 631e8e34ea..25a3b77028 100644
--- a/frontend/src/features/crawl-workflows/workflow-editor.ts
+++ b/frontend/src/features/crawl-workflows/workflow-editor.ts
@@ -214,7 +214,7 @@ export class WorkflowEditor extends BtrixElement {
private progressState?: ProgressState;
@state()
- private defaults: WorkflowDefaults = appDefaults;
+ private orgDefaults: WorkflowDefaults = appDefaults;
@state()
private formState = getDefaultFormState();
@@ -304,7 +304,9 @@ export class WorkflowEditor extends BtrixElement {
connectedCallback(): void {
this.initializeEditor();
super.connectedCallback();
- void this.fetchServerDefaults();
+
+ void this.fetchOrgDefaults();
+ void this.fetchTags();
this.addEventListener(
"btrix-intersect",
@@ -350,15 +352,6 @@ export class WorkflowEditor extends BtrixElement {
if (this.progressState?.activeTab !== STEPS[0]) {
void this.scrollToActivePanel();
}
-
- if (this.orgId) {
- void this.fetchTags();
- void this.fetchOrgQuotaDefaults();
- }
- }
-
- private async fetchServerDefaults() {
- this.defaults = await getServerDefaults();
}
private initializeEditor() {
@@ -1104,12 +1097,12 @@ https://archiveweb.page/images/${"logo.svg"}`}
value=${this.formState.pageLimit || ""}
min=${minPages}
max=${ifDefined(
- this.defaults.maxPagesPerCrawl &&
- this.defaults.maxPagesPerCrawl < Infinity
- ? this.defaults.maxPagesPerCrawl
+ this.orgDefaults.maxPagesPerCrawl &&
+ this.orgDefaults.maxPagesPerCrawl < Infinity
+ ? this.orgDefaults.maxPagesPerCrawl
: undefined,
)}
- placeholder=${defaultLabel(this.defaults.maxPagesPerCrawl)}
+ placeholder=${defaultLabel(this.orgDefaults.maxPagesPerCrawl)}
@sl-input=${onInputMinMax}
>
${msg("pages")}
@@ -1152,7 +1145,7 @@ https://archiveweb.page/images/${"logo.svg"}`}
type="number"
inputmode="numeric"
label=${msg("Page Load Timeout")}
- placeholder=${defaultLabel(this.defaults.pageLoadTimeoutSeconds)}
+ placeholder=${defaultLabel(this.orgDefaults.pageLoadTimeoutSeconds)}
value=${ifDefined(this.formState.pageLoadTimeoutSeconds ?? undefined)}
min="0"
@sl-input=${onInputMinMax}
@@ -1181,7 +1174,7 @@ https://archiveweb.page/images/${"logo.svg"}`}
type="number"
inputmode="numeric"
label=${msg("Behavior Timeout")}
- placeholder=${defaultLabel(this.defaults.behaviorTimeoutSeconds)}
+ placeholder=${defaultLabel(this.orgDefaults.behaviorTimeoutSeconds)}
value=${ifDefined(this.formState.behaviorTimeoutSeconds ?? undefined)}
min="0"
@sl-input=${onInputMinMax}
@@ -1195,7 +1188,7 @@ https://archiveweb.page/images/${"logo.svg"}`}
name="autoscrollBehavior"
?checked=${this.formState.autoscrollBehavior}
>
- ${msg("Auto-scroll behavior")}
+ ${msg("Autoscroll behavior")}
`,
)}
${this.renderHelpTextCol(
@@ -1278,7 +1271,7 @@ https://archiveweb.page/images/${"logo.svg"}`}
>
${when(this.appState.settings?.numBrowsers, (numBrowsers) =>
map(
- range(this.defaults.maxScale),
+ range(this.orgDefaults.maxScale),
(i: number) =>
html`
${(i + 1) * numBrowsers}(`/orgs/${this.orgId}`);
- const orgDefaults = {
- ...this.defaults,
+ const [serverDefaults, { quotas }] = await Promise.all([
+ getServerDefaults(),
+ this.api.fetch<{
+ quotas: { maxPagesPerCrawl?: number };
+ }>(`/orgs/${this.orgId}`),
+ ]);
+
+ const defaults = {
+ ...this.orgDefaults,
+ ...serverDefaults,
};
- if (data.quotas.maxPagesPerCrawl && data.quotas.maxPagesPerCrawl > 0) {
- orgDefaults.maxPagesPerCrawl = data.quotas.maxPagesPerCrawl;
+
+ if (defaults.maxPagesPerCrawl && quotas.maxPagesPerCrawl) {
+ defaults.maxPagesPerCrawl = Math.min(
+ defaults.maxPagesPerCrawl,
+ quotas.maxPagesPerCrawl,
+ );
}
- this.defaults = orgDefaults;
+
+ this.orgDefaults = defaults;
} catch (e) {
console.debug(e);
}
diff --git a/frontend/src/index.ts b/frontend/src/index.ts
index de489f9cab..83513acbae 100644
--- a/frontend/src/index.ts
+++ b/frontend/src/index.ts
@@ -1,5 +1,6 @@
import "./utils/polyfills";
+import { provide } from "@lit/context";
import { localized, msg, str } from "@lit/localize";
import type {
SlDialog,
@@ -22,6 +23,7 @@ import "./assets/fonts/Inter/inter.css";
import "./assets/fonts/Recursive/recursive.css";
import "./styles.css";
+import { viewStateContext } from "./context/view-state";
import { OrgTab, RouteNamespace, ROUTES } from "./routes";
import type { UserInfo, UserOrg } from "./types/user";
import { pageView, type AnalyticsTrackProps } from "./utils/analytics";
@@ -98,6 +100,7 @@ export class App extends BtrixElement {
@state()
private translationReady = false;
+ @provide({ context: viewStateContext })
@state()
private viewState!: ViewState;
@@ -558,7 +561,6 @@ export class App extends BtrixElement {
@click=${this.navigate.link}
>${msg("Running Crawls")}
-
${this.renderFindCrawl()}
`
: nothing}
@@ -904,57 +906,6 @@ export class App extends BtrixElement {
>`;
}
- private renderFindCrawl() {
- return html`
-