ソースを参照

chore(dev-server): Test paths in dashboard extensions

Michael Bromley 9 ヶ月 前
コミット
2f48709963

+ 1 - 1
packages/dashboard/vite.config.mts

@@ -28,7 +28,7 @@ export default ({ mode }: { mode: string }) => {
         },
         plugins: [
             vendureDashboardPlugin({
-                vendureConfigPath: pathToFileURL('./sample-vendure-config.ts'),
+                vendureConfigPath: pathToFileURL('../dev-server/dev-config.ts'),
                 adminUiConfig: { apiHost: adminApiHost, apiPort: adminApiPort },
                 // gqlTadaOutputPath: path.resolve(__dirname, './graphql/'),
                 tempCompilationDir: path.resolve(__dirname, './.temp'),

+ 1 - 1
packages/dev-server/dev-config.ts

@@ -22,7 +22,7 @@ import path from 'path';
 import { DataSourceOptions } from 'typeorm';
 
 import { MultivendorPlugin } from './example-plugins/multivendor-plugin/multivendor.plugin';
-import { ReviewsPlugin } from './test-plugins/reviews/reviews-plugin';
+import { ReviewsPlugin } from '@plugins/reviews/reviews-plugin';
 
 /**
  * Config settings used during development

+ 4 - 3
packages/dev-server/package.json

@@ -6,8 +6,8 @@
     "private": true,
     "scripts": {
         "populate": "node -r ts-node/register -r dotenv/config populate-dev-server.ts",
-        "dev:server": "node -r ts-node/register -r dotenv/config index.ts",
-        "dev:worker": "node -r ts-node/register -r dotenv/config index-worker.ts",
+        "dev:server": "node -r ts-node/register -r dotenv/config -r tsconfig-paths/register index.ts",
+        "dev:worker": "node -r ts-node/register -r dotenv/config -r tsconfig-paths/register index-worker.ts",
         "dev": "concurrently npm:dev:*",
         "dashboard:dev": "vite dev",
         "load-test:1k": "node -r ts-node/register load-testing/run-load-test.ts 1000",
@@ -32,6 +32,7 @@
         "csv-stringify": "^6.4.6",
         "dayjs": "^1.11.10",
         "jsdom": "^26.0.0",
-        "progress": "^2.0.3"
+        "progress": "^2.0.3",
+        "tsconfig-paths": "^4.2.0"
     }
 }

+ 25 - 0
packages/dev-server/test-plugins/reviews/entities/product-review-translation.entity.ts

@@ -0,0 +1,25 @@
+import { DeepPartial } from '@vendure/common/lib/shared-types';
+import { LanguageCode, Translation, VendureEntity } from '@vendure/core';
+import { Column, Entity, Index, ManyToOne } from 'typeorm';
+
+import { ProductReview } from './product-review.entity';
+
+@Entity()
+export class ProductReviewTranslation
+    extends VendureEntity
+    implements Translation<ProductReview>
+{
+    constructor(input?: DeepPartial<Translation<ProductReviewTranslation>>) {
+        super(input);
+    }
+
+    @Column('varchar')
+    languageCode: LanguageCode;
+
+    @Column('varchar')
+    text: string; // same name as the translatable field in the base entity
+
+    @Index()
+    @ManyToOne(() => ProductReview, base => base.translations, { onDelete: 'CASCADE' })
+    base: ProductReview;
+}

+ 9 - 6
packages/dev-server/test-plugins/reviews/entities/product-review.entity.ts

@@ -1,18 +1,18 @@
-/* eslint-disable @typescript-eslint/no-unused-vars */
-import { Customer, DeepPartial, Product, ProductVariant, VendureEntity } from '@vendure/core';
-import { Column, Entity, ManyToOne } from 'typeorm';
-
+import { Customer, DeepPartial, LocaleString, Product, ProductVariant, Translatable, Translation, VendureEntity } from '@vendure/core';
+import { Column, Entity, ManyToOne, OneToMany } from 'typeorm';
 import { ReviewState } from '../types';
+import { ProductReviewTranslation } from './product-review-translation.entity';
 
 @Entity()
-export class ProductReview extends VendureEntity {
+export class ProductReview extends VendureEntity implements Translatable {
     constructor(input?: DeepPartial<ProductReview>) {
         super(input);
     }
-
     @ManyToOne(type => Product)
     product: Product;
 
+    text: LocaleString;
+
     @ManyToOne(type => ProductVariant)
     productVariant: ProductVariant | null;
 
@@ -48,4 +48,7 @@ export class ProductReview extends VendureEntity {
 
     @Column({ nullable: true, default: null })
     responseCreatedAt: Date;
+
+    @OneToMany(() => ProductReviewTranslation, translation => translation.base, { eager: true })
+    translations: Array<Translation<ProductReview>>;
 }

+ 3 - 2
packages/dev-server/test-plugins/reviews/reviews-plugin.ts

@@ -8,10 +8,11 @@ import { ProductReviewAdminResolver } from './api/product-review-admin.resolver'
 import { ProductReviewEntityResolver } from './api/product-review-entity.resolver';
 import { ProductReviewShopResolver } from './api/product-review-shop.resolver';
 import { ProductReview } from './entities/product-review.entity';
+import { ProductReviewTranslation } from './entities/product-review-translation.entity';
 
 @VendurePlugin({
     imports: [PluginCommonModule],
-    entities: [ProductReview],
+    entities: [ProductReview, ProductReviewTranslation],
     adminApiExtensions: {
         schema: adminApiExtensions,
         resolvers: [ProductEntityResolver, ProductReviewAdminResolver, ProductReviewEntityResolver],
@@ -48,7 +49,7 @@ import { ProductReview } from './entities/product-review.entity';
         });
         return config;
     },
-    dashboard: path.join(__dirname, './dashboard/index.tsx'),
+    dashboard: './dashboard',
 })
 export class ReviewsPlugin {
     static uiExtensions: AdminUiExtension = {

+ 2 - 1
packages/dev-server/tsconfig.json

@@ -5,7 +5,8 @@
         "sourceMap": true,
         "jsx": "react-jsx",
         "paths": {
-            "@vendure/admin-ui/*": ["../admin-ui/package/*"]
+            "@vendure/admin-ui/*": ["../admin-ui/package/*"],
+            "@plugins/*": ["./test-plugins/*"]
         }
     },
     "exclude": ["node_modules"]