hayun-vite 0.13.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/Form/Form.js CHANGED
@@ -9,18 +9,19 @@ import MultiText from "../MultiText/MultiText.js";
9
9
  const svgNS = "http://www.w3.org/2000/svg";
10
10
 
11
11
  export default class Form {
12
- constructor({ container, template } = {}) {
12
+ constructor({ container, template, mode = "production" } = {}) {
13
13
  this.template = template;
14
14
  this.container = container;
15
+ this.mode = mode;
15
16
  this.data = {};
16
17
  let { width, height, margin, paper } = template;
17
- this.page = this.create({ paper, margin });
18
- this.page.style.display = 'none';
18
+ this.svg = this.create({ paper, margin }); // اس‌وی‌جی مادر فرم را صفحه نامگذاری میکنیم بذاریم همون اس‌وی‌جی؟
19
+ this.svg.style.display = 'none';
19
20
  let dims;
20
21
  // رسم مارجین های فرم
21
- this.drawMarginLines({ container: this.page, width, height });
22
+ this.drawMarginLines({ container: this.svg, width, height });
22
23
 
23
- const sections = new Sections({ container: this.page, dims: template });
24
+ const sections = new Sections({ container: this.svg, dims: template });
24
25
  this.sections = sections;
25
26
 
26
27
  if (sections.header) {
@@ -57,53 +58,54 @@ export default class Form {
57
58
  })
58
59
  }
59
60
  if (sections['Speech Titles']) {
60
- dims= template['Speech Titles'];
61
+ dims = template['Speech Titles'];
61
62
  const titles = new MultiText({ container: sections['Speech Titles'], dims });
62
63
  }
63
64
  if (sections['RSpeech']) {
64
- dims= template.RSpeech
65
- this.RSpeech = new Speech({ container: sections.RSpeech, side: 'R', dims})
65
+ dims = template.RSpeech
66
+ this.RSpeech = new Speech({ container: sections.RSpeech, side: 'R', dims })
66
67
  }
67
68
  if (sections.LSpeech) {
68
- dims= template.LSpeech
69
+ dims = template.LSpeech
69
70
  this.LSpeech = new Speech({ container: sections.LSpeech, side: 'L', dims })
70
71
  }
71
72
  if (sections['Tympanogram Titles']) {
72
- dims= template['Tympanogram Titles'];
73
+ dims = template['Tympanogram Titles'];
73
74
  new MultiText({ container: sections['Tympanogram Titles'], dims });
74
75
  }
75
76
  if (sections.RTympanogram) {
76
- dims= template.RTympanogram
77
+ dims = template.RTympanogram
77
78
  this.RTympanogram = new Tympanogram({ container: sections.RTympanogram, side: 'R', dims })
78
79
  }
79
80
  if (sections.LTympanogram) {
80
- dims= template.LTympanogram
81
+ dims = template.LTympanogram
81
82
  this.LTympanogram = new Tympanogram({ container: sections.LTympanogram, side: 'L', dims })
82
83
  }
83
84
  if (sections['Reflex Titles']) {
84
- dims= template['Reflex Titles'];
85
+ dims = template['Reflex Titles'];
85
86
  const titles = new MultiText({ container: sections['Reflex Titles'], dims });
86
87
  }
87
88
  if (sections.RReflex) {
88
- dims= template.RReflex
89
+ dims = template.RReflex
89
90
  this.RReflex = new Reflex({ container: sections.RReflex, side: 'R', dims })
90
91
  }
91
92
  if (sections.LReflex) {
92
- dims= template.LReflex
93
+ dims = template.LReflex
93
94
  this.LReflex = new Reflex({ container: sections.LReflex, side: 'L', dims })
94
95
  }
95
96
  if (sections.report) {
96
- dims= template.report;
97
+ dims = template.report;
97
98
  this.report = new MultiText({ container: sections.report, dims })
98
99
  }
99
100
  if (sections.footer) {
100
- dims= template.footer;
101
- this.footer = new MultiText({ container: sections.footer, dims})
101
+ dims = template.footer;
102
+ this.footer = new MultiText({ container: sections.footer, dims })
102
103
  }
103
104
 
104
- this.container.appendChild(this.page);
105
- }
105
+ this.container.appendChild(this.svg);
106
106
 
107
+ this.addEvent()
108
+ }
107
109
 
108
110
  create({ paper, margin }) {
109
111
  const { width, height } = paper;
@@ -130,85 +132,91 @@ export default class Form {
130
132
  return svg
131
133
  }
132
134
 
133
- update({ data, officeData, patientData, sessionIndex = 0 }) {
135
+ update({ officeData, patientData, sessionIndex = 0 }) {
134
136
 
135
137
  const session = patientData.sessions[sessionIndex]
136
- // Prevent undefined error
137
- if (!data) {
138
- data = {
139
- common: {
140
- audiometer: "",
141
- tympanometers: "",
142
- },
143
- header: {
144
- officeName: officeData.name,
145
- officeLogo: officeData.logo,
146
- createDate: patientData.sessions[sessionIndex]?.createDate,
147
- },
148
- patient: {
149
- name: patientData.name,
150
- lastName: patientData.lastName,
151
- gender: patientData?.gender,
152
- // خط زیر محاسبه درست سن هست. موقتا کامنت می‌شود تا در اپ اصلی فیلد سن رو در سشن ها قرار دهیم
153
- // age: patientData.sessions[sessionIndex]?.age,
154
- age: patientData?.age,
155
- referrer: patientData.sessions[sessionIndex]?.referrer,
156
- date: new Date().toLocaleDateString('fa-IR'),
157
-
158
- },
159
- footer: {
160
- address: officeData.addresses[0],
161
- tel: officeData.tels[0],
162
- },
163
- id: +sessionIndex + 1,
164
- };
165
- // data = { audiogram: {}, common: {}, footer: {}, header: {}, patient: {}, reflex: {}, report: {}, speech: {}, tympanometry: {} }
166
- }
167
- // find which data reach and then call corresponding update function
168
- // get array of keys (audiogram, header, footer, ...)
169
- let keys = Object.keys(data)
138
+
139
+ let data = {
140
+ header: {
141
+ officeName: officeData.name,
142
+ officeLogo: officeData.logos[officeData.selectedLogoIndex],
143
+ createDate: patientData.sessions[sessionIndex]?.createDate,
144
+ },
145
+ patient: {
146
+ name: patientData.name,
147
+ lastName: patientData.lastName,
148
+ gender: patientData?.gender,
149
+ // خط زیر محاسبه درست سن هست. موقتا کامنت می‌شود تا در اپ اصلی فیلد سن رو در سشن ها قرار دهیم
150
+ // age: patientData.sessions[sessionIndex]?.age,
151
+ age: patientData?.age,
152
+ referrer: patientData.sessions[sessionIndex]?.referrer,
153
+ date: new Date().toLocaleDateString('fa-IR'),
154
+ },
155
+ footer: {
156
+ address: officeData.addresses[0],
157
+ tel: officeData.tels[0],
158
+ },
159
+ id: +sessionIndex + 1,
160
+ };
161
+
162
+ // let keys = Object.keys(data)
170
163
  // if (keys.includes("header")) {
171
164
 
172
- this.header?.update(data.header)
165
+ console.log(JSON.stringify(this.data.header) !== JSON.stringify(data.header));
166
+
167
+ // console.log(this.data.header, data.header);
168
+
169
+ JSON.stringify(this.data.header) !== JSON.stringify(data.header) &&
170
+ this.header?.update(data.header)
171
+ this.data.header = data.header
173
172
  // }
174
173
  // if (keys.includes("patient")) {
175
- this.patient?.update(data.patient)
174
+ JSON.stringify(this.data.patient) !== JSON.stringify(data.patient) &&
175
+ this.patient?.update(data.patient)
176
+ this.data.patient = data.patient
176
177
  // }
177
178
  // if (keys.includes("history")) {
178
-
179
- this.history?.update(session?.history)
179
+ JSON.stringify(this.data.history) !== JSON.stringify(data.history) &&
180
+ this.history?.update(session?.history)
180
181
  this.data.history = session.history;
181
182
  // }
182
183
  // if (keys.includes("audiogram")) {
183
- this.RAudiogram?.update({ data: session.audiogram?.R, side: 'R' })
184
- this.LAudiogram?.update({ data: session.audiogram?.L, side: 'L' })
184
+ if (JSON.stringify(this.data.audiogram) !== JSON.stringify(data.audiogram)) {
185
+ this.RAudiogram?.update({ data: session.audiogram?.R, side: 'R' })
186
+ this.LAudiogram?.update({ data: session.audiogram?.L, side: 'L' })
187
+ }
185
188
  this.data.audiogram = session.audiogram
186
189
  // }
187
190
  // if (keys.includes("speech")) {
188
- this.RSpeech?.update(session.speech?.R)
189
- this.LSpeech?.update(session.speech?.L)
191
+ if (JSON.stringify(this.data.speech) !== JSON.stringify(data.speech)) {
192
+ this.RSpeech?.update(session.speech?.R)
193
+ this.LSpeech?.update(session.speech?.L)
194
+ }
190
195
  this.data.speech = session.speech
191
196
  // }
192
197
  // if (keys.includes("tympanogram")) {
193
- this.RTympanogram?.update(session.tympanogram?.R)
194
- this.LTympanogram?.update(session.tympanogram?.L)
198
+ if (JSON.stringify(this.data.tympanogram) !== JSON.stringify(data.tympanogram) && data.tympanogram) {
199
+ this.RTympanogram?.update(session.tympanogram?.R)
200
+ this.LTympanogram?.update(session.tympanogram?.L)
201
+ }
195
202
  this.data.tympanogram = session.tympanogram;
196
203
  // }
197
204
  // if (keys.includes("reflex")) {
198
- this.RReflex?.update(session.reflex?.R)
199
- this.LReflex?.update(session.reflex?.L)
200
- this.data.tympanogram = session.reflex;
205
+ if (JSON.stringify(this.data.reflex) !== JSON.stringify(data.reflex)) {
206
+ this.RReflex?.update(session.reflex?.R)
207
+ this.LReflex?.update(session.reflex?.L)
208
+ }
209
+ this.data.reflex = session.reflex;
201
210
  // }
202
211
  // if (keys.includes("report")) {
203
- this.report?.update(session.report)
212
+ JSON.stringify(this.data.report) !== JSON.stringify(data.report) &&
213
+ this.report?.update(session.report)
204
214
  this.data.report = session.report;
205
215
  // }
206
216
  // if (keys.includes("footer")) {
207
- // console.log("footer Data:", data?.footer);
208
-
209
- this.footer?.update(data?.footer)
217
+ JSON.stringify(this.data.footer) !== JSON.stringify(data.footer) &&
218
+ this.footer?.update(data?.footer)
210
219
  this.data.footer = data.footer;
211
- // }
212
220
  }
213
221
 
214
222
  // خطوط نقطه چین مارجین فرم
@@ -224,4 +232,12 @@ export default class Form {
224
232
  `;
225
233
  putRect({ container, x: 0, y: 0, width, height, style, className: 'no-print' })
226
234
  }
235
+
236
+ // افزودن رویداد کلیک روی فرم
237
+ addEvent({ } = {}) {
238
+ this.svg.addEventListener("click", e => {
239
+ console.log(e.target.dataset['name']);
240
+
241
+ })
242
+ }
227
243
  }
@@ -1,32 +1,28 @@
1
1
  // import '../styles.css' // برای تست منتقل شد به فایل ایندکس اصلی اچ‌تی‌ام‌ال و برای توسعه منتقل شده به ایندکس جی اس
2
- import putLine from "../common/putLine.js";
3
- import printForm from "./printForm.js";
4
- import Form from "../Form/Form.js";
2
+ import printForm from "./printForm.js"
3
+ import Form from "../Form/Form.js"
4
+ import putGrid from "../common/putGrid.js"
5
5
 
6
- const svgNS = "http://www.w3.org/2000/svg";
6
+ const svgNS = "http://www.w3.org/2000/svg"
7
7
 
8
- // import combo from "./templates/combo.js"; // این در حقیقیت یک تمپلت هست
9
- // import rasaAud from "./templates/rasa_audiometry.js";
10
- // import rasaTymp from './templates/rasa_tymp_reflex.js'
11
-
12
- // خط کد زیر لازم هست
13
- // import '/fonts/webfonts/Vazirmatn-Regular.woff2'
8
+ import templCombo from "../../assets/templates/templCombo.js" // این در حقیقیت یک تمپلت هست
9
+ import templAudiometry from "../../assets/templates/templAudiometry.js"
14
10
 
15
11
  // کلاس جدید که فرم‌های مختلف را نمایش میدهد
16
12
  export default class Forms {
17
13
  constructor({ assets, container, templates, defaultTemplateIndex = 0, mode = 'production' } = {}) {
18
14
  this.container = container
19
15
  this.mode = mode;
20
- // this.addForms({ templates: [rasaAud, rasaTymp, combo], defaultTemplateIndex })
16
+ this.forms = [] // آرایه آبجکت های فرم های مختلف
21
17
  this.addForms({ templates, defaultTemplateIndex })
22
18
  }
23
19
 
24
20
  // افزودن فرم
25
21
  addForms({ templates, defaultTemplateIndex }) {
22
+ const forms = this.forms;
26
23
  const container = this.container
27
24
  // ایجاد یک دیو برای قرار دادن دکمه ها و لینک های فرم
28
25
  const div = document.createElement('div');
29
-
30
26
  div.style = 'border: 1px solid brown; margin: 0; padding: 0;'
31
27
  container.appendChild(div);
32
28
 
@@ -34,101 +30,88 @@ export default class Forms {
34
30
  let className = 'button-form persian';
35
31
  const btns = [];
36
32
 
37
- const forms = []; // آرایه آبجکت های فرم های مختلف
38
- this.forms = forms;
39
-
40
33
  templates.
41
34
  forEach((template, index) => {
35
+
42
36
  this.mode == 'develop' &&
43
- (btns[index] = this.putButton({ container: div, text: template.label, className }));
44
- this.forms.push(new Form({ container, template }));
45
- });
37
+ (btns[index] = this.putButton({ container: div, text: template.label, className }))
38
+ this.forms.push(new Form({ container, template, mode: this.mode }))
39
+ })
40
+
46
41
 
47
42
  // انتخاب فرم پیش‌فرض
48
- let selectedIndex = defaultTemplateIndex;
49
- forms[selectedIndex].page.style.display = 'block';
50
- this.selectedForm = this.forms[selectedIndex];
51
- (this.mode == 'develop') && (btns[selectedIndex].style.backgroundColor = ' #1c15e1');
43
+ let selectedIndex = defaultTemplateIndex
44
+ this.selectedIndex = selectedIndex // برای استفاده در متد آپدیت
52
45
 
53
- if (this.mode == 'develop') {
46
+ forms[selectedIndex].svg.style.display = 'block'
47
+ // this.selectedForm = this.forms[selectedIndex] // سمی‌کالن واجب
54
48
 
55
- const printBtn = this.putButton({ container: div, text: 'چاپ', className });
56
- // تعریف رویداد دکمه چاپ فرم نمایشی
57
- printBtn.addEventListener('click', () => { printForm({ container: this.selectedForm.page }) });
49
+ this.mode == 'develop' &&
50
+ (btns[selectedIndex].style.backgroundColor = ' #1c15e1') // اگر عبارت اول توی پرانتز باشه سمی‌کالن واجب
58
51
 
52
+ // به ازای هر فرم یک دکمه هم به دیو بالای فرم اضافه میکند در حالت دولوپ
53
+ // افزودن دکمه مربوطه به فرمها به دام
54
+ this.mode == 'develop' &&
59
55
  btns.forEach((btn, index) => {
60
56
  btn.addEventListener('click', () => {
61
57
  // Hide All forms
62
58
  forms.forEach((form, i) => {
63
- form.page.style.display = 'none'
59
+ form.svg.style.display = 'none'
64
60
  btns[i].style.backgroundColor = ' #7472e2'
61
+ })
65
62
 
66
- });
67
-
68
- forms[index].page.style.display = 'block';
63
+ forms[index].svg.style.display = 'block'
69
64
  btns[index].style.backgroundColor = ' #1c15e1'
70
65
 
71
- this.selectedForm = forms[index];
66
+ // this.selectedForm = forms[index]
72
67
  selectedIndex = index
73
- this.update(this.allData);
68
+ this.selectedIndex = selectedIndex
69
+ this.update(this.dataParams)
74
70
  })
75
- })
71
+ }) // سمی‌کالن واجب
76
72
 
77
- // دکمه نمایش و پنهان خطوط سکشن
78
- this.putButton({ container: div, text: 'Show/Hide Section Borders', className })
79
- .addEventListener('click', () => {
80
- this.toggleDisplay({ container: forms[selectedIndex].page, borderName: 'section-border' })
81
- });
82
-
83
- // دکمه نمایش و پنهان خطوط بوردر
84
- this.putButton({ container: div, text: 'Show/Hide Box Borders', className })
85
- .addEventListener('click', () => {
86
- this.toggleDisplay({ container: forms[selectedIndex].page, borderName: 'box-border' })
87
- });
88
-
89
- // دکمه نمایش و پنهان شطرنجی
90
- this.putButton({ container: div, text: 'Show/Hide Grid', className })
91
- .addEventListener('mouseenter', () => {
92
- this.grid({ container: forms[selectedIndex].page })
93
- });
94
- // فراخوانی تابع شطرنجی در اولین اجرا
95
- this.grid({ container: forms[selectedIndex].page })
96
- }
73
+ // افزودن چهار دکمه چاپ صفحه فرم انتخاب شده و تاگل پنهان یا نمایش
74
+ this.mode == 'develop' &&
75
+ this.addButtons({ container: div, className, svg: forms[selectedIndex].svg })
97
76
  }
98
77
 
99
- grid({ container }) {
100
- console.log(container);
101
- const cord = { xStart: -5, yStart: -5, xEnd: 210 - 5, yEnd: 297 - 5, xStep: 1, yStep: 1 }
102
- let { xStart, yStart, xEnd, yEnd, xStep, yStep } = cord
78
+ // افزودن چهار دکمه چاپ صفحه فرم انتخاب شده و تاگل پنهان یا نمایش
79
+ addButtons({ container, className, svg }) {
103
80
 
104
- // رسم خطوط افقی
105
- let style = 'stroke: blue; stroke-width: 0.05 ; stroke-opacity: 0.8; stroke-dasharray: 0.2;'
106
- let x1 = xStart
107
- let y1
108
-
109
- let x2 = xEnd
110
- let y2
81
+ // تعریف دکمه و رویداد دکمه چاپ صفحه فرم نمایشی
82
+ this.putButton({ container, text: 'چاپ', className })
83
+ .addEventListener('click', () => {
84
+ printForm({ container: this.forms[this.selectedIndex].svg })
85
+ });
111
86
 
112
- for (let y1 = yStart; y1 <= yEnd; y1 += yStep) {
113
- y2 = y1
114
- putLine({ container, x1, y1, x2, y2, style, name: 'grid' })
115
- }
87
+ // دکمه و رویداد نمایش و پنهان خطوط سکشن
88
+ this.putButton({ container, text: 'Show/Hide Section Borders', className })
89
+ .addEventListener('click', () => {
90
+ this.toggleDisplay({ container: svg, borderName: 'section-border' })
91
+ });
116
92
 
117
- // رسم خطوط عمودی
118
- y1 = yStart
119
- for (x1 = xStart; x1 <= xEnd; x1 += xStep) {
120
- const x2 = x1
121
- putLine({ container, x1, y1, x2, y2, style, name: 'grid' })
122
- }
93
+ // دکمه و رویداد نمایش و پنهان خطوط بوردر
94
+ this.putButton({ container, text: 'Show/Hide Box Borders', className })
95
+ .addEventListener('click', () => {
96
+ this.toggleDisplay({ container: svg, borderName: 'box-border' })
97
+ });
123
98
 
99
+ // دکمه نمایش و پنهان شطرنجی
100
+ this.putButton({ container, text: 'Show/Hide Grid', className })
101
+ .addEventListener('mouseenter', () => {
102
+ putGrid({ container: svg })
103
+ });
104
+ // فراخوانی تابع شطرنجی در اولین اجرا
105
+ // putGrid({ container: forms[selectedIndex].svg })
124
106
 
125
107
  }
126
108
 
127
109
  // این تابع یک بار از بیرون کلاس فراخوانی میشه و یک بار وقتی از داخل تمپلت فرم را عوض میکنیم
128
- update({ data, officeData, patientData, sessionIndex = 0 }) {
110
+ update({ officeData, patientData, sessionIndex = 0 }) {
129
111
  // ذخیره کل دیتا برای استفاده داخلی آپدیت فرم انتخاب شده
130
- this.allData = { data, officeData, patientData, sessionIndex }
131
- this.selectedForm.update({ data, officeData, patientData, sessionIndex })
112
+ this.dataParams = { officeData, patientData, sessionIndex }
113
+ // this.selectedForm.update({ officeData, patientData, sessionIndex })
114
+ this.forms[this.selectedIndex].update(this.dataParams)
132
115
  }
133
116
 
134
117
  // توابع داخلی ایجاد دکمه و لینک های بالای فرم
@@ -0,0 +1,37 @@
1
+ import { officeData, patientData } from "../../assets/data/sampleData";
2
+ import templAudiometry from "../../assets/templates/templAudiometry";
3
+ import templCombo from "../../assets/templates/templCombo";
4
+ import Forms from "./Forms";
5
+
6
+ document.querySelector('#app').innerHTML = `
7
+ <div id="test"></div>
8
+ `;
9
+
10
+ const container = document.getElementById('test')
11
+
12
+ const forms = new Forms({ container, templates: [templCombo,], mode: 'develop' });
13
+
14
+ // forms.update({ officeData, patientData, sessionIndex: 0 })
15
+ forms.update({ officeData, patientData, sessionIndex: 1 })
16
+
17
+ // forms.update({ officeData, patientData, sessionIndex: 1 })
18
+ // forms.update({ officeData, patientData, sessionIndex: 1 })
19
+ // forms.update({ officeData, patientData, sessionIndex: 1 })
20
+ // forms.update({ officeData, patientData, sessionIndex: 1 })
21
+ // forms.update({ officeData, patientData, sessionIndex: 1 })
22
+ // forms.update({ officeData, patientData, sessionIndex: 1 })
23
+ // forms.update({ officeData, patientData, sessionIndex: 1 })
24
+ // forms.update({ officeData, patientData, sessionIndex: 1 })
25
+ // forms.update({ officeData, patientData, sessionIndex: 1 })
26
+ // forms.update({ officeData, patientData, sessionIndex: 1 })
27
+ // forms.update({ officeData, patientData, sessionIndex: 1 })
28
+ // forms.update({ officeData, patientData, sessionIndex: 1 })
29
+ // forms.update({ officeData, patientData, sessionIndex: 1 })
30
+ // forms.update({ officeData, patientData, sessionIndex: 1 })
31
+ // forms.update({ officeData, patientData, sessionIndex: 0 })
32
+ // forms.update({ officeData, patientData, sessionIndex: 0 })
33
+ // forms.update({ officeData, patientData, sessionIndex: 0 })
34
+
35
+ // خط برای کپی پیست نقشی در کد ندارد
36
+
37
+
@@ -6,6 +6,7 @@ const svgNS = "http://www.w3.org/2000/svg";
6
6
 
7
7
  export default class Header {
8
8
  constructor({ container }) {
9
+
9
10
  this.container = container;
10
11
  }
11
12
 
@@ -18,11 +19,11 @@ export default class Header {
18
19
  let x = dims.margin.left;
19
20
  let y = dims.margin.top;
20
21
 
21
- const svg = putSVG({ x, y, width, height, style: 'direction: rtl !important; user-select: none;' })
22
+ const svg = putSVG({ x, y, width, height, style: 'font-family: Vazir; direction: rtl !important; user-select: none;' })
22
23
 
23
24
  // Logo
24
25
  let image = document.createElementNS(svgNS, "image");
25
- image.setAttribute("data-name", "officeLogo")
26
+ image.setAttribute("data-name", "officeLogo") // برای تابع آپدیت استفاده می‌شود
26
27
  image.setAttribute("width", "17");
27
28
  image.setAttribute("height", height - 1);
28
29
  image.setAttribute("x", width - 16);
@@ -30,14 +31,10 @@ export default class Header {
30
31
  svg.appendChild(image);
31
32
 
32
33
  let style = `
33
- user-select: none;
34
- direction: rtl;
35
- /* text-align: center; */
36
- font-family: Vazir;
37
34
  font-size: 0.8mm;
38
35
  font-weight: bolder;
39
- text-anchor: start; /*تراز افقی*/
40
- dominant-baseline: auto; /* تراز عمودی*/
36
+ text-anchor: start;
37
+ dominant-baseline: auto;
41
38
  `;
42
39
 
43
40
  // اگر مقدار استروک درست بود لیبل ها را چاپ کن
@@ -72,6 +69,8 @@ export default class Header {
72
69
  }
73
70
 
74
71
  update(data) {
72
+ console.log('I`m from header.update');
73
+
75
74
  this.container.querySelector("[data-name=officeName]").innerHTML = data?.officeName || "";
76
75
  this.container.querySelector("[data-name=date]").innerHTML = data?.createDate || "";
77
76
  this.container.querySelector("[data-name=officeLogo]").setAttribute("href", data?.officeLogo || "");
@@ -76,9 +76,6 @@ export default class MultiText {
76
76
  })
77
77
 
78
78
  this.container.appendChild(svg)
79
-
80
-
81
-
82
79
  }
83
80
 
84
81
  update(data) {
@@ -87,16 +84,21 @@ export default class MultiText {
87
84
  const textInput = this.container.querySelector(`text[data-name=${input.name}]`)
88
85
 
89
86
  // پیدا کردن کاراکترهای رفتن به سرخط در متن
90
- const textLines = value.toString().split(/\n|\r|\r\n/);
91
- const x = textInput.getAttribute('x')
92
- // اگر متن چند خطی بود
93
- if (textLines.length >= 2) {
94
- let y = 5;
95
- textLines.forEach(value => {
96
- putTspan({ container: textInput, value, x, y });
97
- y += 6;
98
- })
99
- } else textInput.innerHTML = value || "";
87
+ if (value) {
88
+ const textLines = value.toString().split(/\n|\r|\r\n/);
89
+ const x = textInput.getAttribute('x')
90
+ // اگر متن چند خطی بود
91
+ if (textLines.length >= 2) {
92
+ // اول از همه هر چی تی‌اسپن از قبل توی این تکست اینپوت هست پاک کن
93
+ textInput.textContent = ""
94
+
95
+ let y = 5;
96
+ textLines.forEach(value => {
97
+ putTspan({ container: textInput, value, x, y });
98
+ y += 6;
99
+ })
100
+ } else textInput.textContent = value || "";
101
+ }
100
102
  });
101
103
  }
102
104
  }
@@ -7,6 +7,7 @@ const svgNS = "http://www.w3.org/2000/svg";
7
7
 
8
8
  export default class Speech {
9
9
  constructor({ container, side = 'R', dims }) {
10
+
10
11
  this.container = container;
11
12
  this.side = side;
12
13
  this.draw({ dims })