fix: Prevent browser profile selection overflow (#2029)
- Truncates selected browser profile description and refreshes style - Order browser profiles by modified date
This commit is contained in:
		
							parent
							
								
									6ce565b5f7
								
							
						
					
					
						commit
						351e92ae2f
					
				| @ -29,6 +29,8 @@ export class Details extends LitElement { | |||||||
|   // postcss-lit-disable-next-line
 |   // postcss-lit-disable-next-line
 | ||||||
|   static styles = css` |   static styles = css` | ||||||
|     :host { |     :host { | ||||||
|  |       --margin-bottom: var(--sl-spacing-2x-small); | ||||||
|  |       --border-bottom: 1px solid var(--sl-panel-border-color); | ||||||
|       display: block; |       display: block; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -46,8 +48,8 @@ export class Details extends LitElement { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     details[aria-disabled="false"] summary { |     details[aria-disabled="false"] summary { | ||||||
|       border-bottom: 1px solid var(--sl-panel-border-color); |       border-bottom: var(--border-bottom); | ||||||
|       margin-bottom: var(--sl-spacing-x-small); |       margin-bottom: var(--margin-bottom); | ||||||
|       cursor: pointer; |       cursor: pointer; | ||||||
|       user-select: none; |       user-select: none; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| import { localized, msg } from "@lit/localize"; | import { localized, msg } from "@lit/localize"; | ||||||
| import { type SlSelect } from "@shoelace-style/shoelace"; | import { type SlSelect } from "@shoelace-style/shoelace"; | ||||||
| import { html } from "lit"; | import { html, nothing } from "lit"; | ||||||
| import { customElement, property, state } from "lit/decorators.js"; | import { customElement, property, state } from "lit/decorators.js"; | ||||||
| import orderBy from "lodash/fp/orderBy"; | import orderBy from "lodash/fp/orderBy"; | ||||||
| 
 | 
 | ||||||
| @ -77,7 +77,7 @@ export class SelectBrowserProfile extends LiteElement { | |||||||
|                 <div class="text-xs"> |                 <div class="text-xs"> | ||||||
|                   <sl-format-date |                   <sl-format-date | ||||||
|                     lang=${getLocale()} |                     lang=${getLocale()} | ||||||
|                     date=${`${profile.created}Z` /** Z for UTC */} |                     date=${`${profile.modified}Z` /** Z for UTC */} | ||||||
|                     month="2-digit" |                     month="2-digit" | ||||||
|                     day="2-digit" |                     day="2-digit" | ||||||
|                     year="2-digit" |                     year="2-digit" | ||||||
| @ -89,6 +89,32 @@ export class SelectBrowserProfile extends LiteElement { | |||||||
|         ${this.browserProfiles && !this.browserProfiles.length |         ${this.browserProfiles && !this.browserProfiles.length | ||||||
|           ? this.renderNoProfiles() |           ? this.renderNoProfiles() | ||||||
|           : ""} |           : ""} | ||||||
|  |         ${this.selectedProfile | ||||||
|  |           ? html` | ||||||
|  |               <div slot="help-text" class="flex justify-between"> | ||||||
|  |                 <span> | ||||||
|  |                   ${msg("Last updated")} | ||||||
|  |                   <sl-format-date | ||||||
|  |                     lang=${getLocale()} | ||||||
|  |                     date=${`${this.selectedProfile.modified}Z` /** Z for UTC */} | ||||||
|  |                     month="2-digit" | ||||||
|  |                     day="2-digit" | ||||||
|  |                     year="2-digit" | ||||||
|  |                     hour="2-digit" | ||||||
|  |                     minute="2-digit" | ||||||
|  |                   ></sl-format-date> | ||||||
|  |                 </span> | ||||||
|  |                 <a | ||||||
|  |                   class="flex items-center gap-1 text-blue-500 hover:text-blue-600" | ||||||
|  |                   href=${`${this.orgBasePath}/browser-profiles/profile/${this.selectedProfile.id}`} | ||||||
|  |                   target="_blank" | ||||||
|  |                 > | ||||||
|  |                   ${msg("Check Profile")} | ||||||
|  |                   <sl-icon name="box-arrow-up-right"></sl-icon> | ||||||
|  |                 </a> | ||||||
|  |               </div> | ||||||
|  |             ` | ||||||
|  |           : nothing} | ||||||
|       </sl-select> |       </sl-select> | ||||||
| 
 | 
 | ||||||
|       ${this.browserProfiles?.length ? this.renderSelectedProfileInfo() : ""} |       ${this.browserProfiles?.length ? this.renderSelectedProfileInfo() : ""} | ||||||
| @ -96,42 +122,19 @@ export class SelectBrowserProfile extends LiteElement { | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   private renderSelectedProfileInfo() { |   private renderSelectedProfileInfo() { | ||||||
|     if (!this.selectedProfile) return; |     if (!this.selectedProfile?.description) return; | ||||||
| 
 | 
 | ||||||
|     return html` |     return html`<div class="my-2 rounded border pl-1">
 | ||||||
|       <div |       <btrix-details style="--margin-bottom: 0; --border-bottom: 0;"> | ||||||
|         class="mt-2 flex justify-between rounded border bg-neutral-50 p-2 text-sm" |         <div slot="title" class="text-xs leading-normal text-neutral-600"> | ||||||
|       > |           ${msg("Description")} | ||||||
|         ${this.selectedProfile.description |         </div> | ||||||
|           ? html`<em class="text-slate-500"
 |         <!-- display: inline --> | ||||||
|               >${this.selectedProfile.description}</em |         <div class="whitespace-pre-line p-3 text-xs leading-normal" | ||||||
|             >` |           >${this.selectedProfile.description}</div | ||||||
|           : ""} |  | ||||||
|         <span> |  | ||||||
|           ${msg("Last edited:")} |  | ||||||
|           <sl-format-date |  | ||||||
|             lang=${getLocale()} |  | ||||||
|             date=${`${this.selectedProfile.created}Z` /** Z for UTC */} |  | ||||||
|             month="2-digit" |  | ||||||
|             day="2-digit" |  | ||||||
|             year="2-digit" |  | ||||||
|           ></sl-format-date> |  | ||||||
|         </span> |  | ||||||
|         <a |  | ||||||
|           href=${`${this.orgBasePath}/browser-profiles/profile/${this.selectedProfile.id}`} |  | ||||||
|           class="font-medium text-primary hover:text-indigo-500" |  | ||||||
|           target="_blank" |  | ||||||
|         > |         > | ||||||
|           <span class="mr-1 inline-block align-middle" |       </btrix-details> | ||||||
|             >${msg("Check profile")}</span |     </div>`;
 | ||||||
|           > |  | ||||||
|           <sl-icon |  | ||||||
|             class="inline-block align-middle" |  | ||||||
|             name="box-arrow-up-right" |  | ||||||
|           ></sl-icon> |  | ||||||
|         </a> |  | ||||||
|       </div> |  | ||||||
|     `;
 |  | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   private renderNoProfiles() { |   private renderNoProfiles() { | ||||||
| @ -188,7 +191,7 @@ export class SelectBrowserProfile extends LiteElement { | |||||||
|     try { |     try { | ||||||
|       const data = await this.getProfiles(); |       const data = await this.getProfiles(); | ||||||
| 
 | 
 | ||||||
|       this.browserProfiles = orderBy(["name", "created"])(["asc", "desc"])( |       this.browserProfiles = orderBy(["name", "modified"])(["asc", "desc"])( | ||||||
|         data, |         data, | ||||||
|       ) as Profile[]; |       ) as Profile[]; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -264,16 +264,18 @@ export class BrowserProfilesDetail extends BtrixElement { | |||||||
|             `,
 |             `,
 | ||||||
|           )} |           )} | ||||||
|         </header> |         </header> | ||||||
|         <div class="rounded border p-5"> |         <!-- display: inline --> | ||||||
|           ${this.profile |         <div | ||||||
|  |           class="leading whitespace-pre-line rounded border p-5 leading-relaxed first-line:leading-[0]" | ||||||
|  |           >${this.profile | ||||||
|             ? this.profile.description || |             ? this.profile.description || | ||||||
|               html` |               html` | ||||||
|                 <div class="text-center text-neutral-400"> |                 <div class="text-center text-neutral-400"> | ||||||
|                   ${msg("No description added.")} |                    ${msg("No description added.")} | ||||||
|                 </div> |                 </div> | ||||||
|               ` |               ` | ||||||
|             : nothing} |             : nothing}</div | ||||||
|         </div> |         > | ||||||
|       </section> |       </section> | ||||||
| 
 | 
 | ||||||
|       <section class="mb-7"> |       <section class="mb-7"> | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user