| /** | |
| * @license | |
| * Copyright (C) 2025 The Android Open Source Project | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| import {PluginApi} from '@gerritcodereview/typescript-api/plugin'; | |
| import {css, CSSResult, html, LitElement, nothing} from 'lit'; | |
| import {customElement, property, state} from 'lit/decorators.js'; | |
| import '@gerritcodereview/typescript-api/gerrit'; | |
| declare global { | |
| interface HTMLElementTagNameMap { | |
| 'gr-lfs': GrLfs; | |
| } | |
| } | |
| @customElement('gr-lfs') | |
| export class GrLfs extends LitElement { | |
| @property({type: Object}) | |
| plugin!: PluginApi; | |
| @property({type: String}) repoName = ''; | |
| @state() private _appliedConfig?: { | |
| enabled?: boolean; | |
| max_object_size?: string; | |
| read_only?: boolean; | |
| backend?: string; | |
| }; | |
| override connectedCallback() { | |
| super.connectedCallback(); | |
| this._getPreferences(); | |
| } | |
| static override get styles() { | |
| return [ | |
| window.Gerrit?.styles.form as CSSResult, | |
| css` | |
| :host { | |
| display: block; | |
| } | |
| .sectionTitle { | |
| padding-top: 2em; | |
| } | |
| /* Placeholder: Replace these with actual shared styles or imports */ | |
| .gr-form-styles { | |
| border: none; | |
| padding: 0; | |
| } | |
| section { | |
| display: flex; | |
| margin-bottom: 8px; | |
| } | |
| .title { | |
| font-weight: bold; | |
| width: 150px; | |
| } | |
| .value { | |
| flex: 1; | |
| } | |
| `, | |
| ]; | |
| } | |
| override render() { | |
| const cfg = this._appliedConfig; | |
| if (!cfg) return nothing; | |
| return html` | |
| <fieldset class="gr-form-styles"> | |
| <h2 class="sectionTitle">LFS Info</h2> | |
| <section> | |
| <span class="title">Enabled</span> | |
| <span class="value">${cfg.enabled ?? ''}</span> | |
| </section> | |
| <section> | |
| <span class="title">Max Object Size</span> | |
| <span class="value">${cfg.max_object_size ?? ''}</span> | |
| </section> | |
| <section> | |
| <span class="title">Read Only</span> | |
| <span class="value">${cfg.read_only ?? ''}</span> | |
| </section> | |
| ${cfg.backend | |
| ? html` | |
| <section> | |
| <span class="title">Backend</span> | |
| <span class="value">${cfg.backend}</span> | |
| </section> | |
| ` | |
| : nothing} | |
| </fieldset> | |
| `; | |
| } | |
| private _getPreferences() { | |
| let encodedRepoName = encodeURIComponent(this.repoName); | |
| return this.plugin.restApi() | |
| .get(`/projects/${encodedRepoName}/${this.plugin.getPluginName()}~lfs:config-project`) | |
| .then(config => { | |
| if (!config || Object.entries(config).length === 0) { | |
| return; | |
| } | |
| this._appliedConfig = config | |
| }) | |
| } | |
| } |