Files
rogee 321c61aaae Vendor Chatwoot Vue 3 frontend into frontend/
Copy the Chatwoot (v4.14.0) frontend runnable subset into frontend/ for
customization:
- app/javascript/ (Vue SPA: dashboard, widget, sdk, portal, superadmin)
- app/views/ (ERB templates for vite-plugin-ruby entrypoint resolution)
- app/helpers/, app/assets/ (Rails view helpers, static assets)
- enterprise/ (Enterprise edition frontend overlay)
- config/vite.json, vite.config.ts, bin/vite (Vite-Rails toolchain)
- package.json, pnpm-lock.yaml, tailwind/postcss/eslint configs
- Gemfile, Gemfile.lock (vite_rails gem for bin/vite binstub)

Excluded Rails backend: controllers, models, services, jobs, mailers,
policies, db, lib, spec, public, node_modules.

Update references to the new frontend location:
- .gitignore: exclude frontend build artifacts (node_modules, tmp, packs),
  keep frontend/bin/ and frontend/vendor/ via negation
- backend/scripts/parity_frontend_smoke.sh: CHATWOOT_DIR default
  reference/chatwoot -> ../frontend
- backend/scripts/parity_frontend_browser_smoke.mjs: same default update
- AGENTS.md: add frontend section with Rails/Vite coupling notes
- README: architecture tree includes frontend/
2026-07-07 14:56:01 +08:00

67 lines
1.4 KiB
Vue

<script>
import CustomButton from 'shared/components/Button.vue';
import TextArea from 'shared/components/TextArea.vue';
import Spinner from 'shared/components/Spinner.vue';
export default {
name: 'Feedback',
components: {
CustomButton,
TextArea,
Spinner,
},
props: {
isUpdating: {
type: Boolean,
default: false,
},
isButtonDisabled: {
type: Boolean,
default: false,
},
selectedRating: {
type: Number,
default: null,
},
},
emits: ['sendFeedback'],
data() {
return {
feedback: '',
};
},
computed: {
isSubmitDisabled() {
return (
this.isButtonDisabled || !this.selectedRating || !this.feedback.trim()
);
},
},
methods: {
onClick() {
if (this.isSubmitDisabled) return;
this.$emit('sendFeedback', this.feedback);
},
},
};
</script>
<template>
<div class="mt-6">
<label class="text-base font-medium text-n-slate-12">
{{ $t('SURVEY.FEEDBACK.LABEL') }}
</label>
<TextArea
v-model="feedback"
class="my-5"
:placeholder="$t('SURVEY.FEEDBACK.PLACEHOLDER')"
/>
<div class="flex items-center float-right font-medium">
<CustomButton :disabled="isSubmitDisabled" @click="onClick">
<Spinner v-if="isUpdating" class="p-0" />
{{ $t('SURVEY.FEEDBACK.BUTTON_TEXT') }}
</CustomButton>
</div>
</div>
</template>