desktop/src/app/models/blob-container.ts (44 lines of code) (raw):
import { Model, NavigableRecord, Prop, Record } from "@batch-flask/core";
import { StorageContainerProperties } from "app/services/storage";
import { Constants } from "common";
import { ContainerLease, ContainerLeaseAttributes } from "./container-lease";
export interface BlobContainerAttributes {
id: string;
name: string;
publicAccessLevel: string;
metadata?: any;
lastModified?: Date;
lease?: Partial<ContainerLeaseAttributes>;
}
/**
* Class for displaying blob container information.
*/
@Model("BlobContainer")
export class BlobContainer extends Record<BlobContainerAttributes> implements NavigableRecord {
// container name
@Prop() public id: string;
// container name with the prefix removed
@Prop() public name: string;
@Prop() public publicAccessLevel: string;
@Prop() public metadata: any;
@Prop() public lastModified?: Date;
@Prop() public lease: ContainerLease;
@Prop() public storageAccountId: string;
constructor(container: StorageContainerProperties) {
super(container);
this.lease = new ContainerLease({
state: container.leaseState,
status: container.leaseStatus,
duration: container.leaseDuration
});
this.publicAccessLevel = container.publicAccess;
}
public get routerLink(): string[] {
if (this.isFileGroup) {
return ["/data/file-groups/containers", this.id];
} else {
return ["/data", this.storageAccountId, "containers", this.id];
}
}
public get isFileGroup() {
return this.id && this.id.startsWith(Constants.legacyFileGroupPrefix);
}
public get uid() {
return this.storageAccountId.toLowerCase() + "/" + this.id;
}
}