dify/web
-LAN- 1a65600b54
fix: conversation opener feature state persistence and display
This commit fixes issue #26500 where the conversation opener feature
doesn't preserve its enabled state and doesn't work correctly.

Changes:
1. Updated feature initialization logic to check for both opening_statement
   and suggested_questions when determining if the feature is enabled
2. Simplified save logic to always send the actual content instead of
   clearing it when disabled
3. Added automatic modal opening when user toggles feature on without content
4. Added logic to automatically set enabled state based on content presence
5. Added logic to disable feature if user cancels modal without adding content

This ensures that:
- The feature's enabled state is correctly determined from saved content
- Users must add content (opening statement or suggested questions) to enable the feature
- The enabled state is automatically managed based on content presence
- The feature state persists correctly across page refreshes
2025-09-30 18:18:01 +08:00
..
.husky [Chore/Refactor] Switch from MyPy to Basedpyright for type checking (#25047) 2025-09-03 11:52:26 +08:00
.storybook Introduce Plugins (#13836) 2025-02-17 17:05:13 +08:00
.vscode feat: knowledge pipeline (#25360) 2025-09-18 12:49:10 +08:00
__mocks__ feat: regenerate history switch navigation (#8749) 2024-10-24 12:09:46 +08:00
__tests__ [Chore/Refactor] Add missing 'type' attribute on 'button' components (#26249) 2025-09-28 13:43:43 +08:00
app fix: conversation opener feature state persistence and display 2025-09-30 18:18:01 +08:00
assets fix: missing files (#2291) 2024-01-30 16:21:40 +08:00
bin
config fix: enhance model parameter handling with advanced mode support and localization updates (#25963) 2025-09-19 15:47:52 +08:00
context feat: knowledge pipeline (#25360) 2025-09-18 12:49:10 +08:00
docker refactor: Promote basepath to environment variable (#24445) 2025-08-29 15:39:37 +08:00
hooks chore: time from now i18n support (#26328) 2025-09-28 13:37:42 +08:00
i18n minor fix: fix some translations: trunk should use native, and some translation typos (#26469) 2025-09-30 10:17:13 +08:00
i18n-config feat: knowledge pipeline (#25360) 2025-09-18 12:49:10 +08:00
models feat(pipeline): add language support to built-in pipeline templates and update related components (#26124) 2025-09-23 18:18:22 +08:00
public feat: knowledge pipeline (#25360) 2025-09-18 12:49:10 +08:00
scripts feat(web): add Progressive Web App (PWA) support (#25274) 2025-09-06 16:04:24 +08:00
service [Chore/Refactor] Add missing 'type' attribute on 'button' components (#26249) 2025-09-28 13:43:43 +08:00
themes feat: knowledge pipeline (#25360) 2025-09-18 12:49:10 +08:00
types feat: knowledge pipeline (#25360) 2025-09-18 12:49:10 +08:00
utils fix: enhance model parameter handling with advanced mode support and localization updates (#25963) 2025-09-19 15:47:52 +08:00
.dockerignore Enhance Code Consistency Across Repository with `.editorconfig` (#19023) 2025-04-29 18:04:33 +08:00
.env.example refactor: Promote basepath to environment variable (#24445) 2025-08-29 15:39:37 +08:00
.gitignore Introduce Plugins (#13836) 2025-02-17 17:05:13 +08:00
.oxlintrc.json Fix/disable no unsafe optional chaining (#25553) 2025-09-12 10:03:34 +08:00
Dockerfile refactor: Promote basepath to environment variable (#24445) 2025-08-29 15:39:37 +08:00
README.md docs: format all md files (#24195) 2025-08-20 13:49:11 +08:00
eslint.config.mjs CI: add TS indentation check via esLint (#24810) 2025-09-01 15:31:59 +08:00
global.d.ts feat: add TypeScript type safety for i18next with automated maintenance (#25152) 2025-09-04 17:12:48 +08:00
jest.config.ts feat/TanStack-Form (#18346) 2025-04-18 15:54:22 +08:00
jest.setup.ts feat/TanStack-Form (#18346) 2025-04-18 15:54:22 +08:00
middleware.ts Revert "♻️ refactor(middleware): remove duplicate CSP header assignment" (#20592) 2025-06-03 17:43:48 +08:00
next.config.js fix: add echarts and zrender to transpilePackages for ESM compatibility (#26208) 2025-09-25 22:43:37 +08:00
package.json add back babel/core (#26489) 2025-09-30 15:35:10 +08:00
pnpm-lock.yaml add back babel/core (#26489) 2025-09-30 15:35:10 +08:00
postcss.config.js
tailwind-common-config.ts feat: knowledge pipeline (#25360) 2025-09-18 12:49:10 +08:00
tailwind.config.js Introduce Plugins (#13836) 2025-02-17 17:05:13 +08:00
tsconfig.json bump nextjs to 15.5 and turbopack for development mode (#24346) 2025-09-23 16:59:26 +08:00
typography.js Chore: frontend infrastructure upgrade (#16420) 2025-03-21 17:41:03 +08:00

README.md

Dify Frontend

This is a Next.js project bootstrapped with create-next-app.

Getting Started

Run by source code

Before starting the web frontend service, please make sure the following environment is ready.

First, install the dependencies:

pnpm install

Then, configure the environment variables. Create a file named .env.local in the current directory and copy the contents from .env.example. Modify the values of these environment variables according to your requirements:

cp .env.example .env.local
# For production release, change this to PRODUCTION
NEXT_PUBLIC_DEPLOY_ENV=DEVELOPMENT
# The deployment edition, SELF_HOSTED
NEXT_PUBLIC_EDITION=SELF_HOSTED
# The base URL of console application, refers to the Console base URL of WEB service if console domain is
# different from api or web app domain.
# example: http://cloud.dify.ai/console/api
NEXT_PUBLIC_API_PREFIX=http://localhost:5001/console/api
# The URL for Web APP, refers to the Web App base URL of WEB service if web app domain is different from
# console or api domain.
# example: http://udify.app/api
NEXT_PUBLIC_PUBLIC_API_PREFIX=http://localhost:5001/api

# SENTRY
NEXT_PUBLIC_SENTRY_DSN=

Finally, run the development server:

pnpm run dev

Open http://localhost:3000 with your browser to see the result.

You can start editing the file under folder app. The page auto-updates as you edit the file.

Deploy

Deploy on server

First, build the app for production:

pnpm run build

Then, start the server:

pnpm run start

If you want to customize the host and port:

pnpm run start --port=3001 --host=0.0.0.0

If you want to customize the number of instances launched by PM2, you can configure PM2_INSTANCES in docker-compose.yaml or Dockerfile.

Storybook

This project uses Storybook for UI component development.

To start the storybook server, run:

pnpm storybook

Open http://localhost:6006 with your browser to see the result.

Lint Code

If your IDE is VSCode, rename web/.vscode/settings.example.json to web/.vscode/settings.json for lint code setting.

Test

We start to use Jest and React Testing Library for Unit Testing.

You can create a test file with a suffix of .spec beside the file that to be tested. For example, if you want to test a file named util.ts. The test file name should be util.spec.ts.

Run test:

pnpm run test

If you are not familiar with writing tests, here is some code to refer to:

Documentation

Visit https://docs.dify.ai/getting-started/readme to view the full documentation.

Community

The Dify community can be found on Discord community, where you can ask questions, voice ideas, and share your projects.