Skip to content

Commit

Permalink
Added minimum height/width parameter
Browse files Browse the repository at this point in the history
  • Loading branch information
DynamicsNinja committed Jun 12, 2019
1 parent bac658d commit 5d0e265
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 11 deletions.
4 changes: 3 additions & 1 deletion GalleryFieldControl/ControlManifest.Input.xml
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
<?xml version="1.0" encoding="utf-8" ?>
<manifest>
<control namespace="Fic" constructor="GalleryFieldControl" version="1.2.0" display-name-key="Fic.GalleryFieldControl" description-key="Fic.GalleryFieldControl" control-type="standard">
<control namespace="Fic" constructor="GalleryFieldControl" version="1.3.2" display-name-key="Fic.GalleryFieldControl" description-key="Fic.GalleryFieldControl" control-type="standard">
<property name="sampleProperty" display-name-key="Property_Display_Key" description-key="Property_Desc_Key" of-type="SingleLine.Text" usage="bound" required="true" />
<property name="thumbnailHeight" display-name-key="Thumbnail Height(px)" description-key="Thumbnail Height(px)" of-type="Whole.None" usage="input" required="false" />
<property name="thumbnailWidth" display-name-key="Thumbnail Width(px)" description-key="Thumbnail Width(px)" of-type="Whole.None" usage="input" required="false" />
<property name="minImageHeight" display-name-key="Min Image Height(px)" description-key="Min Image Height(px)" of-type="Whole.None" usage="input" required="false" />
<property name="minImageWidth" display-name-key="Min Image Width(px)" description-key="Min Image Width(px)" of-type="Whole.None" usage="input" required="false" />
<resources>
<code path="index.ts" order="1"/>
<css path="css/GalleryFieldControl.css" order="1"/>
Expand Down
41 changes: 31 additions & 10 deletions GalleryFieldControl/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ export class GalleryFieldControl implements ComponentFramework.StandardControl<I
private _thumbnailHeight: number | null;
private _thumbnailWidth: number | null;

private _minImageHeight: number | null;
private _minImageWidth: number | null;

private _notesContainer: HTMLDivElement;
private _timelineEmailsContainer: HTMLDivElement;

Expand Down Expand Up @@ -62,6 +65,9 @@ export class GalleryFieldControl implements ComponentFramework.StandardControl<I
this._thumbnailHeight = context.parameters.thumbnailHeight == undefined ? null : context.parameters.thumbnailHeight.raw;
this._thumbnailWidth = context.parameters.thumbnailWidth == undefined ? null : context.parameters.thumbnailWidth.raw;

this._minImageHeight = context.parameters.minImageHeight == undefined ? null : context.parameters.minImageHeight.raw;
this._minImageWidth = context.parameters.minImageWidth == undefined ? null : context.parameters.minImageWidth.raw;

let reference: EntityReference = new EntityReference(
(<any>context).page.entityTypeName,
(<any>context).page.entityId
Expand Down Expand Up @@ -195,13 +201,13 @@ export class GalleryFieldControl implements ComponentFramework.StandardControl<I
let items = [];
for (let i = 0; i < result.entities.length; i++) {
let record = result.entities[i];
let fileName = <string>record["filename"];

let mimeType = <string>record["mimetype"];
if (!this.supportedMimeTypes.includes(mimeType)) { continue; }
let fileName = <string>record["filename"];
let content = <string>record["body"] || <string>record["documentbody"];
let fileSize = <number>record["filesize"];

if (!this.supportedMimeTypes.includes(mimeType)) { continue; }

let file = new AttachedFile(fileName, mimeType, content, fileSize);
items.push(file);
}
Expand All @@ -212,7 +218,7 @@ export class GalleryFieldControl implements ComponentFramework.StandardControl<I
}
}

private RenderThumbnails(files: AttachedFile[], container: HTMLDivElement) {
private async RenderThumbnails(files: AttachedFile[], container: HTMLDivElement) {
for (let index = 0; index < files.length; index++) {
const file = files[index];

Expand All @@ -222,17 +228,24 @@ export class GalleryFieldControl implements ComponentFramework.StandardControl<I
let thumbnailDiv = document.createElement("div");
thumbnailDiv.classList.add("thumbnail");

let imageDiv = document.createElement("img");
imageDiv.src = 'data:' + file.mimeType + ';base64, ' + file.fileContent;
imageDiv.height = this._thumbnailHeight == null ? 150 : this._thumbnailHeight;
imageDiv.width = this._thumbnailWidth == null ? 150 : this._thumbnailWidth;
imageDiv.addEventListener("click", this._thumbnailClicked);
// let imageDiv = document.createElement("img");
// imageDiv.src = 'data:' + file.mimeType + ';base64, ' + file.fileContent;
let base64String = 'data:' + file.mimeType + ';base64, ' + file.fileContent;
let imageDiv = await this.GetLoadedImageElement(base64String);

if ((this._minImageHeight != null && imageDiv.height < this._minImageHeight) && (this._minImageWidth != null && imageDiv.width < this._minImageWidth)) {
imageDiv.remove();
continue;
}

imageDiv.height = this._thumbnailHeight == null ? 150 : this._thumbnailHeight;
imageDiv.width = this._thumbnailWidth == null ? 150 : this._thumbnailWidth;
imageDiv.addEventListener("click", this._thumbnailClicked);
thumbnailDiv.appendChild(imageDiv);

let fileNameDiv = document.createElement("div");
fileNameDiv.classList.add("file-name");
fileNameDiv.style.width = (this._thumbnailWidth == null ? 162 : this._thumbnailWidth+12).toString() + "px";
fileNameDiv.style.width = (this._thumbnailWidth == null ? 162 : this._thumbnailWidth + 12).toString() + "px";
fileNameDiv.textContent = file.fileName;
fileNameDiv.onclick = (e => { this.DownloadFile(file); });

Expand Down Expand Up @@ -277,4 +290,12 @@ export class GalleryFieldControl implements ComponentFramework.StandardControl<I
const myFile = this.Base64ToFile(file.fileContent, file.fileName, file.mimeType);
FileSaver.saveAs(myFile, file.fileName);
}

private async GetLoadedImageElement(base64: string):Promise<HTMLImageElement>{
return new Promise((resolve, reject) => {
let imageDiv = document.createElement("img");
imageDiv.onload = () => resolve(imageDiv);
imageDiv.src = base64;
});
}
}

0 comments on commit 5d0e265

Please sign in to comment.