Skip to content

Commit

Permalink
init junction table selectedMediaFile
Browse files Browse the repository at this point in the history
  • Loading branch information
Xziy committed Sep 5, 2024
1 parent aec0c89 commit e01bcbf
Show file tree
Hide file tree
Showing 24 changed files with 1,176 additions and 31 deletions.
6 changes: 5 additions & 1 deletion hook/bindAdminpanel.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = bindAdminpanel;
const bind_1 = __importDefault(require("../libs/adminpanel/models/bind"));
const ProductCatalog_1 = require("../libs/adminpanel/ProductCatalog/ProductCatalog");
function bindAdminpanel() {
sails.on('Adminpanel:afterHook:loaded', async () => {
Expand All @@ -14,7 +18,7 @@ function bindAdminpanel() {
function processBindAdminpanel() {
if (sails.hooks?.adminpanel?.addModelConfig !== undefined) {
const addModelConfig = sails.hooks.adminpanel.addModelConfig;
addModelConfig(settings);
addModelConfig(bind_1.default);
}
if (Array.isArray(sails.config.adminpanel?.sections)) {
let baseRoute = sails.config.adminpanel.routePrefix;
Expand Down
1 change: 0 additions & 1 deletion libs/adminpanel/ProductCatalog/ProductCatalog.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ declare class BaseModelItem<T extends Item> extends AbstractItem<T> {
}>;
getChilds(parentId: string, catalogId: string): Promise<Item[]>;
search(s: string, catalogId: string): Promise<T[]>;
updateModelItems(itemId: string | number, data: T, catalogId: string): Promise<T>;
}
export declare class Group<GroupProductItem extends Item> extends BaseModelItem<GroupProductItem> {
name: string;
Expand Down
3 changes: 0 additions & 3 deletions libs/adminpanel/ProductCatalog/ProductCatalog.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,6 @@ class BaseModelItem extends AbstractCatalog_1.AbstractItem {
});
return records.map((record) => this.toItem(record));
}
updateModelItems(itemId, data, catalogId) {
return Promise.resolve(undefined);
}
}
class Group extends BaseModelItem {
constructor() {
Expand Down
4 changes: 0 additions & 4 deletions libs/adminpanel/ProductCatalog/ProductCatalog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,6 @@ class BaseModelItem<T extends Item> extends AbstractItem<T> {

return records.map((record: ItemModel) => this.toItem(record) as T);
}

updateModelItems(itemId: string | number, data: T, catalogId: string): Promise<T> {
return Promise.resolve(undefined);
}
}


Expand Down
30 changes: 30 additions & 0 deletions libs/adminpanel/ProductMediaManager/Item.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { File, Item, UploaderFile, imageSizes } from 'sails-adminpanel/lib/media-manager/AbstractMediaManager';
export declare class ImageItem extends File<Item> {
type: "application" | "audio" | "example" | "image" | "message" | "model" | "multipart" | "text" | "video";
constructor(path: string, dir: string, model: string, metaModel: string);
getItems(limit: number, skip: number, sort: string): Promise<{
data: Item[];
next: boolean;
}>;
search(s: string): Promise<Item[]>;
upload(file: UploaderFile, filename: string, origFileName: string, imageSizes?: imageSizes | {}): Promise<Item>;
getChildren(id: string): Promise<Item[]>;
protected createSizes(file: UploaderFile, parent: Item, filename: string, imageSizes: imageSizes): Promise<void>;
protected createThumb(id: string, file: UploaderFile, filename: string, origFileName: string): Promise<void>;
protected createEmptyMeta(id: string): Promise<void>;
getMeta(id: string): Promise<{
key: string;
value: string;
}[]>;
setMeta(id: string, data: {
[p: string]: string;
}): Promise<{
msg: "success";
}>;
protected resizeImage(input: string, output: string, width: number, height: number): Promise<any>;
uploadCropped(parent: Item, file: UploaderFile, filename: string, config: {
width: number;
height: number;
}): Promise<Item>;
delete(id: string): Promise<void>;
}
168 changes: 168 additions & 0 deletions libs/adminpanel/ProductMediaManager/Item.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ImageItem = void 0;
const AbstractMediaManager_1 = require("sails-adminpanel/lib/media-manager/AbstractMediaManager");
const MediaManagerHelper_1 = require("sails-adminpanel/lib/media-manager/helpers/MediaManagerHelper");
const image_size_1 = __importDefault(require("image-size"));
const sharp = __importStar(require("sharp"));
class ImageItem extends AbstractMediaManager_1.File {
constructor(path, dir, model, metaModel) {
super(path, dir, model, metaModel);
this.type = "image";
}
async getItems(limit, skip, sort) {
let data = await sails.models[this.model].find({
where: { parent: null, mimeType: { contains: this.type } },
limit: limit,
skip: skip,
sort: sort //@ts-ignore
}).populate('children', { sort: sort });
let next = (await sails.models[this.model].find({
where: { parent: null, mimeType: { contains: this.type } },
limit: limit,
skip: skip === 0 ? limit : skip + limit,
sort: sort
})).length;
return {
data: data,
next: !!next
};
}
async search(s) {
return await sails.models[this.model].find({
where: { filename: { contains: s }, mimeType: { contains: this.type }, parent: null },
sort: 'createdAt DESC'
}).populate('children', { sort: 'createdAt DESC' });
}
async upload(file, filename, origFileName, imageSizes) {
let parent = await sails.models[this.model].create({
parent: null,
mimeType: file.type,
size: file.size,
path: file.fd,
cropType: 'origin',
filename: origFileName,
image_size: (0, image_size_1.default)(file.fd),
url: `/${this.path}/${filename}`
}).fetch();
await this.createEmptyMeta(parent.id);
if (parent.image_size.width > 150 && parent.image_size.height > 150) {
await this.createThumb(parent.id, file, filename, origFileName);
}
if (Object.keys(imageSizes).length) {
await this.createSizes(file, parent, filename, imageSizes);
}
return sails.models[this.model].find({
where: { id: parent.id }
}).populate('children');
}
async getChildren(id) {
return (await sails.models[this.model].findOne({
where: { id: id }
}).populate('children', { sort: 'createdAt DESC' })).children;
}
async createSizes(file, parent, filename, imageSizes) {
for (const sizeKey of Object.keys(imageSizes)) {
let sizeName = (0, MediaManagerHelper_1.randomFileName)(filename, sizeKey, false);
let { width, height } = imageSizes[sizeKey];
if (parent.image_size.width < width || parent.image_size.height < height)
continue;
let newFile = await this.resizeImage(file.fd, `${this.dir}${sizeName}`, width, height);
await sails.models[this.model].create({
parent: parent.id,
mimeType: parent.mimeType,
size: newFile.size,
filename: parent.filename,
path: `${this.dir}${sizeName}`,
cropType: sizeKey,
image_size: (0, image_size_1.default)(`${this.dir}${sizeName}`),
url: `/${this.path}/${sizeName}`
});
}
}
async createThumb(id, file, filename, origFileName) {
const thumbName = (0, MediaManagerHelper_1.randomFileName)(filename, 'thumb', false);
const thumb = await this.resizeImage(file.fd, `${this.dir}${thumbName}`, 150, 150);
await sails.models[this.model].create({
parent: id,
mimeType: file.type,
size: thumb.size,
cropType: 'thumb',
path: `${this.dir}${thumbName}`,
filename: origFileName,
image_size: (0, image_size_1.default)(`${this.dir}${thumbName}`),
url: `/${this.path}/${thumbName}`
});
}
async createEmptyMeta(id) {
//create empty meta
let metaData = {
author: "",
description: "",
title: ""
};
for (const key of Object.keys(metaData)) {
await sails.models[this.metaModel].create({
key: key,
value: metaData[key],
parent: id
});
}
}
async getMeta(id) {
return (await sails.models[this.model].findOne(id).populate('meta')).meta;
}
async setMeta(id, data) {
for (const key of Object.keys(data)) {
await sails.models[this.metaModel].update({ parent: id, key: key }, { value: data[key] });
}
return { msg: "success" };
}
async resizeImage(input, output, width, height) {
return await sharp(input)
.resize({ width: width, height: height })
.toFile(output);
}
async uploadCropped(parent, file, filename, config) {
return await sails.models[this.model].create({
parent: parent.id,
mimeType: file.type,
size: file.size,
path: file.fd,
cropType: `${config.width}x${config.height}`,
filename: parent.filename,
image_size: (0, image_size_1.default)(file.fd),
url: `/${this.path}/${filename}`
}).fetch();
}
async delete(id) {
await sails.models[this.model].destroy({ where: { id: id } }).fetch();
}
}
exports.ImageItem = ImageItem;
Loading

0 comments on commit e01bcbf

Please sign in to comment.