hayun-vite 1.0.0 → 1.2.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.
Files changed (52) hide show
  1. package/assets/templates/mainTemplate.js +1 -1
  2. package/assets/templates/templAudiometry.js +1 -1
  3. package/assets/templates/templCombo.js +1 -1
  4. package/data/currentData.js +117 -0
  5. package/index.html +41 -63
  6. package/index.js +10 -6
  7. package/package.json +3 -7
  8. package/prac.html +42 -0
  9. package/src/Audiogram/dims_100.js +2 -2
  10. package/src/Form/Form.js +29 -10
  11. package/src/Forms/Forms.js +31 -11
  12. package/src/Forms/FormsUI.js +34 -0
  13. package/src/Header/Header.js +1 -1
  14. package/src/Header/Header_box.js +1 -1
  15. package/src/MultiText/MultiText.js +1 -1
  16. package/src/Reflex/Reflex.js +46 -2
  17. package/src/Reflex/ReflexUI.js +78 -0
  18. package/src/Reflex/units.js +1 -1
  19. package/src/Speech/Speech.js +56 -1
  20. package/src/Speech/SpeechUI.js +94 -0
  21. package/src/Speech/units.js +20 -2
  22. package/src/Tympanogram/Tympanogram.js +45 -1
  23. package/src/Tympanogram/TympanogramUI.js +166 -0
  24. package/src/Tympanogram/test.js +1 -1
  25. package/src/Tympanogram/units.js +1 -1
  26. package/src/main.js +11 -5
  27. package/style-font.css +10 -0
  28. package/styles-tailwind.css +14 -0
  29. package/styles.css +57 -178
  30. package/vite.config.js +7 -0
  31. package/assets/rasa.png +0 -0
  32. package/assets/templates/rasa_audiometry.jpg +0 -0
  33. package/assets/templates/rasa_tymp_reflex.jpg +0 -0
  34. package/src/Form/Form_box.js +0 -190
  35. package/src/Forms/ui.js +0 -52
  36. package/src/Speech/Speech_box.js +0 -119
  37. package/src/Speech/ui.js +0 -101
  38. package/src/components/SpeechUI.js +0 -111
  39. package/src/components/common/putG.js +0 -10
  40. package/src/components/common/putGrid.js +0 -31
  41. package/src/components/common/putLine.js +0 -16
  42. package/src/components/common/putPoint.js +0 -13
  43. package/src/components/common/putRect.js +0 -25
  44. package/src/components/common/putSVG.js +0 -14
  45. package/src/components/common/putText.js +0 -19
  46. package/src/components/common/putTopLayer.js +0 -18
  47. package/src/components/index.js +0 -12
  48. package/src/core/AppState.js +0 -36
  49. package/src/core/BaseComponent.js +0 -94
  50. package/src/core/README.md +0 -565
  51. package/src/core/Router.js +0 -74
  52. package/src/style.css +0 -243
@@ -97,7 +97,7 @@ const mainTemplate = {
97
97
 
98
98
  defElements: function () {
99
99
  let box = this['Header'].box
100
- let style = ['user-select: none', 'direction: rtl', 'font-family: Vazir', 'font-size: 1mm'].join('; ')
100
+ let style = ['user-select: none', 'direction: rtl', 'font-family: Vazirmatn', 'font-size: 1mm'].join('; ')
101
101
  box.elements = [
102
102
  { type: 'image', x: 10, y: 30 },
103
103
  { type: 'line', x1: 0, y1: box.height, x2: box.width, y2: box.height },
@@ -176,7 +176,7 @@ const templAudiometry = {
176
176
  height = this.header.height = this.getHeight(this.header)
177
177
 
178
178
  style = `
179
- font-family: Vazir, Helvetica, sans-serif !important;
179
+ font-family: Vazirmatn, Helvetica, sans-serif !important;
180
180
  font-size: 1.5mm;
181
181
  font-weight: bold;
182
182
  text-anchor: start; /*تراز افقی*/
@@ -176,7 +176,7 @@ const templCombo = {
176
176
  height = this.header.height = this.getHeight(this.header)
177
177
 
178
178
  style = `
179
- font-family: Vazir, Helvetica, sans-serif !important;
179
+ font-family: Vazirmatn, Helvetica, sans-serif !important;
180
180
  font-size: 1.5mm;
181
181
  font-weight: bold;
182
182
  text-anchor: start; /*تراز افقی*/
@@ -0,0 +1,117 @@
1
+ const officeData = {
2
+ name: "دفتر ارزیابی شنوایی و سمعک سروش",
3
+ // logo: "/static/media/Daco_1154502.04df6740fbd1f11c99f8.png",
4
+ logos:
5
+ [
6
+ "data:image/png;base64,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"
7
+ ],
8
+ selectedLogoIndex: 0,
9
+
10
+ addresses: ["مشهد، خیابان عارف، عارف ۲، ساختمان سینا، طبقه اول"],
11
+ selectedAddressIndex: 0,
12
+ tels: ["051 38442592", "051 38445232"],
13
+ selectedTelIndex: 1,
14
+ audiologists: [
15
+ {
16
+ name: "مهدی",
17
+ lastName: "جاویدی فیروز طوسی",
18
+ gender: "مرد",
19
+ medicalCouncilNo: "ش ۷۵۴",
20
+ signature: "IMG1",
21
+
22
+ },
23
+ {
24
+ name: "محمد علی",
25
+ lastName: "بربری",
26
+ gender: "مرد",
27
+ medicalCouncilNo: "ش ۱۰۲۰",
28
+ signature: "IMG2",
29
+ },
30
+ ],
31
+ selectedAudiologistIndex: 1,
32
+ audiometers: ["Pejvak Ava C952", "Zodiac Z1"],
33
+ selectedAudiometrIndex: 0,
34
+ tympanometers: ["Pejvak Ava Z71", "Intracoustic T34"],
35
+ selectedTympanometerIndex: 1,
36
+ }
37
+
38
+ const patientData = {
39
+ name: "سید علی اکبر الزمان",
40
+ lastName: "پرنده بافقی یزدی",
41
+ gender: "مرد",
42
+ age: 75,
43
+ birthday: { year: 1356, month: 5, day: 3 },
44
+ nationalCode: "0321456546",
45
+ createDate: "2025/5/5", //تاریخ و ساعت ایجاد بیمار
46
+ updateDates: ["2025/6/5,16:32", "2025/6/5,16:32"],//آرایه تاریخ و ساعت بروزرسانی ها
47
+
48
+ sessions: [
49
+ {
50
+ createDate: new Date().toLocaleDateString("fa-IR"), //تاریخ و ساعت ایجاد نشست بیمار
51
+ updateDates: ["2025/6/5,16:32", "2025/6/5,16:32"], // آرایه تاریخ و ساعت بروزرسانی ها
52
+ age: 77, //سن بیمار در این نشست
53
+ referrer: "دکتر سید علی سرابی ", //ارجاع‌دهنده
54
+ history: {
55
+ description:
56
+ `کاهش شنوایی حسی عصبی ملایم تا متوسط در فرکانس بم تامیانه در گوش راست.
57
+ کاهش شنوایی آمیخته متوسط تا شدید در گوش چپ.`,
58
+ },
59
+ note: "", //رشته متن بلند یادداشت
60
+ audiogram: {
61
+ R: { R_AC: { 500: '25', 1000: '35', 2000: '45', 4000: '55', 8000: '60' } },
62
+ L: {
63
+ L_AC: { 500: '20', 1000: '35', 2000: '45', 4000: '55', 8000: '60' },
64
+ L_BC: { 500: '15', 1000: '30', 2000: '40', 4000: '50', 8000: '20' }
65
+ }
66
+ },
67
+ speech: {
68
+ R: { SAT: '25', SRT: '30', MCL: '55', UCL: '120', SDS: '98', },
69
+ L: { SAT: '15', SRT: '20', UCL: '110', SDS: '88', }
70
+ },
71
+ tympanogram: {
72
+ R: { type: "An", ECV: '2.5', SC: '1.50', MEP: '-50', G: 0.23 },
73
+ L: { type: "C5", SC: 0.10, MEP: -300, G: 0.32 },
74
+ },
75
+ reflex: {
76
+ R: {
77
+ ipsi: { 500: "125", 1000: "90", 2000: "NR", 4000: "NR" },
78
+ contra: { 500: "85", 1000: "90", 2000: "NR", 4000: '120' },
79
+ },
80
+ L: {
81
+ ipsi: { 500: "120", 1000: "90", 2000: "95", 4000: "NR" },
82
+ contra: { 500: "80", 1000: "90", 2000: "NR", 4000: '95' }
83
+ },
84
+ },
85
+ report: {
86
+ description:
87
+ `شرح لقمه شرح لقمه شرح لقمه
88
+ خط دوم خط دوم خط دوم خط دومپ`,
89
+ },
90
+
91
+ },
92
+
93
+ {
94
+ history: { description: "سرگیجه \n دورانی" },
95
+ audiogram: { R: { R_AC: { 500: 5 } }, L: { L_AC: { 500: 15 } } },
96
+ tympanogram: {},
97
+
98
+ },
99
+
100
+ {
101
+ audiogram: { R: { R_AC: { 500: 35 } }, L: { L_AC: { 500: 5 } } },
102
+ speech: { R: { SAT: 25, SDS: 100 } },
103
+
104
+ },
105
+ ]
106
+
107
+ }
108
+
109
+ const appSettingData = {
110
+
111
+ }
112
+
113
+ const currentData = {
114
+ appSettingData, officeData, patientData
115
+ }
116
+
117
+ export { currentData }
package/index.html CHANGED
@@ -4,67 +4,9 @@
4
4
  <head>
5
5
  <meta charset="UTF-8" />
6
6
  <link rel="icon" type="image/svg+xml" href="vite.svg" />
7
- <link rel="stylesheet" href="/styles.css">
8
- <style>
9
- body {
10
- font-family: Vazir;
11
- user-select: none;
12
- }
13
-
14
- h1 {
15
- margin: 1rem 0em 0em 0em
16
- }
17
-
18
- h2 {
19
- margin: auto;
20
- }
21
-
22
- p,
23
- span,
24
- label {
25
- font:
26
- 1.3rem "Fira Sans",
27
- sans-serif;
28
- }
29
-
30
- h1 {
31
- font: 2.5rem Vazir;
32
-
33
- }
34
-
35
- input[type="text"]:focus {
36
- /* outline: none; */
37
- /* removes the blue focus outline */
38
- box-shadow: none;
39
- /* removes any additional focus shadow */
40
- /* border: none; */
41
- /* optional: remove border if desired */
42
- /* margin: 0; */
43
- /* optional: reset margin if browser adds any */
44
- }
45
-
46
- label {
47
- user-select: none;
48
- }
49
-
50
- .center {
51
- display: flex;
52
- align-items: center;
53
- justify-content: space-evenly;
54
- }
55
-
56
- .blue {
57
- color: blue
58
- }
59
-
60
- .red {
61
- color: red;
62
- }
63
-
64
- .border {
65
- border: 1px solid green;
66
- }
67
- </style>
7
+ <link rel="stylesheet" href="style-font.css">
8
+ <link rel="stylesheet" href="styles.css">
9
+ <link rel="stylesheet" href="styles-tailwind.css">
68
10
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
69
11
  <title>hayun</title>
70
12
  </head>
@@ -72,20 +14,56 @@
72
14
  <body>
73
15
 
74
16
  <div id="app"></div>
17
+ <!-- <button id="log">Log Current Data</button> -->
75
18
 
19
+ <script type="module">
20
+ import { currentData } from "/data/currentData.js"
21
+ import speechUI from "/src/Speech/SpeechUI.js"
22
+ import formsUI from "/src/Forms/FormsUI.js"
23
+ import reflexUI from "/src/Reflex/ReflexUI.js"
76
24
 
25
+ const { appSettingData, officeData, patientData } = currentData
26
+ let data = patientData.sessions[0].speech
27
+ speechUI.draw({ containerId: '#app' })
28
+ speechUI.update({ data })
29
+
30
+ // فراخوانی متد آپدیت بدون پارامتر مقادیر وارد شده کاربر را به دیتاآبجکت جاری میفرستد
31
+ // setInterval(() => { speechUI.update() }, 3000);
32
+
33
+ // Accoustic Reflexes Section
34
+ data = patientData.sessions[0].reflex
35
+ reflexUI.draw({ containerId: '#app' })
36
+ reflexUI.update({ data })
37
+
38
+ // formsUI Section
39
+ // data = patientData.sessions[0]
40
+ // formsUI.draw({ containerId: '#app' })
41
+ // formsUI.update({ patientData, sessionIndex: 0 })
42
+
43
+ // setInterval(() => {
44
+ // formsUI.update({ patientData, sessionIndex: 0 })
45
+ // console.log('forms update!');
46
+
47
+ // }, 2000)
48
+
49
+
50
+ // document.querySelector('#log').addEventListener('click', () => {
51
+ // console.log(data.R, data.L);
52
+
53
+ // })
77
54
 
78
- <script>
79
55
 
80
56
  </script>
81
57
 
82
58
  <!-- <script type="module" src="/src/formInputs/ui.js"></script> -->
83
59
  <!-- <script type="module" src="/src/Speech/ui.js"></script> -->
60
+ <!-- <script type="module" src="/src/Speech/speechUI-test.js"></script> -->
84
61
  <!-- <script type="module" src="/src/Audiogram/ui.js"></script> -->
85
- <script type="module" src="/src/main.js"></script>
62
+ <!-- <script type="module" src="/src/main.js"></script> -->
86
63
  <!-- <script type="module" src="/src/Forms/ui.js"></script> -->
87
64
  <!-- <script type="module" src="/src/Reflex/ui.js"></script> -->
88
65
  <!-- <script type="module" src="/src/Tympanogram/ui.js"></script> -->
66
+ <!-- <script type="module" src="/src/Tympanogram/test.js"></script> -->
89
67
 
90
68
  </body>
91
69
 
package/index.js CHANGED
@@ -1,10 +1,13 @@
1
1
  import Audiogram from './src/Audiogram/Audiogram'
2
2
  import dims from './src/Audiogram/dims'
3
- import { officeData, patientData } from './assets/data/sampleData'
3
+ // import { officeData, patientData } from './assets/data/sampleData'
4
4
  import Forms from './src/Forms/Forms'
5
5
  import combo_template from './assets/templates/templCombo'
6
+ import './styles.css'
7
+ import formsUI from './src/Forms/FormsUI'
6
8
  // import './src/style.css'
7
9
  // import './src/Speech/ui.js'
10
+ import { currentData } from './data/currentData'
8
11
 
9
12
 
10
13
 
@@ -12,10 +15,11 @@ import combo_template from './assets/templates/templCombo'
12
15
  // import rasa_tymp_reflex_template from './assets/templates/rasa_tymp_reflex'
13
16
 
14
17
  import logo0 from './assets/logos/logo-0_mm_20w_22h_300p.png'
15
- import logo1 from './assets/logos/logo-1.png'
18
+ import logo1 from './assets/logos/logo-1.png'
16
19
  import logo2 from './assets/logos/logo-2.png'
17
20
  import Speech from './src/Speech/Speech'
18
- import { SpeechUI } from './src/components'
21
+ // import { ReflexUI } from './src/components'
22
+ import speechUI from './src/Speech/SpeechUI'
19
23
 
20
24
  const logos = [logo0, logo1, logo2]
21
25
 
@@ -23,7 +27,7 @@ const logos = [logo0, logo1, logo2]
23
27
 
24
28
 
25
29
  export {
26
- Audiogram, Forms, dims, officeData,
27
- patientData, combo_template,
28
- logos, SpeechUI, Speech
30
+ Audiogram, Forms, dims, currentData, combo_template,
31
+ logos, Speech, speechUI, formsUI
32
+
29
33
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "hayun-vite",
3
3
  "private": false,
4
- "version": "1.0.0",
4
+ "version": "1.2.0",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "vite",
@@ -14,12 +14,8 @@
14
14
  "description": "a big horse ",
15
15
  "main": "index.js",
16
16
  "dependencies": {
17
- "esbuild": "^0.24.2",
18
- "nanoid": "^3.3.8",
19
- "picocolors": "^1.1.1",
20
- "postcss": "^8.5.1",
21
- "rollup": "^4.34.6",
22
- "source-map-js": "^1.2.1"
17
+ "@tailwindcss/vite": "^4.1.10",
18
+ "tailwindcss": "^4.1.10"
23
19
  },
24
20
  "author": "",
25
21
  "license": "ISC"
package/prac.html ADDED
@@ -0,0 +1,42 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>Document</title>
8
+ </head>
9
+
10
+ <body>
11
+ <my-ui-box></my-ui-box>
12
+ <script>
13
+ class MyIsolatedComponent extends HTMLElement {
14
+ constructor() {
15
+ super();
16
+ const shadow = this.attachShadow({ mode: 'open' });
17
+
18
+ // Load external CSS
19
+ const style = document.createElement('style');
20
+ style.textContent = `
21
+ /* Example styles */
22
+ button {
23
+ background: red;
24
+ color: white;
25
+ padding: 1em;
26
+ }
27
+ `;
28
+
29
+ // Add HTML
30
+ const wrapper = document.createElement('div');
31
+ wrapper.innerHTML = `<button>Hello from shadow!</button>`;
32
+
33
+ shadow.appendChild(style);
34
+ shadow.appendChild(wrapper);
35
+ }
36
+ }
37
+ customElements.define('my-ui-box', MyIsolatedComponent);
38
+
39
+ </script>
40
+ </body>
41
+
42
+ </html>
@@ -36,8 +36,8 @@ const units = {
36
36
  fToVf: { 125: 0, 250: 2, 500: 4, 750: 5.2, 1000: 6, 1500: 7.2, 2000: 8, 3000: 9.2, 4000: 10, 6000: 11.2, 8000: 12, 12000: 13.2, 16000: 14 },
37
37
  intensity: { min: -20, max: 130, step: 10 },
38
38
  styles: {
39
- frequency: ['text-anchor: middle', 'dominant-baseline: hanging', 'font: 2px Vazir', 'user-select: none', 'font-weight:bold'].join('; '),
40
- intensity: ['text-anchor: end', 'dominant-baseline: middle', 'font: 2px Vazir', 'user-select: none', 'font-weight:bold'].join('; '),
39
+ frequency: ['text-anchor: middle', 'dominant-baseline: hanging', 'font: 2px Vazirmatn', 'user-select: none', 'font-weight:bold'].join('; '),
40
+ intensity: ['text-anchor: end', 'dominant-baseline: middle', 'font: 2px Vazirmatn', 'user-select: none', 'font-weight:bold'].join('; '),
41
41
  mainFreqline: ['stroke: black', 'stroke-width: 0.1'].join('; '),
42
42
  semiOctavFreqline: ['stroke: black', 'stroke-width: 0.1', 'stroke-dasharray: 0.5'].join('; '),
43
43
  line: 'stroke: black; stroke-width: 0.1;',
package/src/Form/Form.js CHANGED
@@ -84,8 +84,6 @@ export default class Form {
84
84
  if (sections['Reflex Titles']) {
85
85
  dims = template['Reflex Titles'];
86
86
  const titles = new MultiText({ container: sections['Reflex Titles'], dims });
87
- console.log(dims);
88
-
89
87
  }
90
88
  if (sections.RReflex) {
91
89
  dims = template.RReflex
@@ -134,11 +132,30 @@ export default class Form {
134
132
  return svg
135
133
  }
136
134
 
137
- update({ officeData, patientData, sessionIndex = 0 }) {
135
+ update({ officeData, patientData, sessionIndex }) {
136
+ // جداکردن دیتای مربوط به سکشن های مختلف
137
+ const currentPatientData = patientData.sessions[sessionIndex]
138
+ const data = {
139
+ audiogram: currentPatientData.audiogram,
140
+ speech: currentPatientData.speech,
141
+ tympanogram: currentPatientData.tympanogram,
142
+ reflex: currentPatientData.reflex,
143
+
144
+ }
145
+ this.patient?.update(patientData)
146
+ data?.audiogram?.R && this.RAudiogram?.update({ data: data.audiogram.R, side: 'R' })
147
+ data?.audiogram?.L && this.LAudiogram?.update({ data: data.audiogram.L, side: 'L' })
148
+ data?.speech?.R && this.RSpeech?.update(data?.speech?.R)
149
+ data?.speech?.L && this.LSpeech?.update(data?.speech?.L)
150
+ data?.tympanogram?.R && this.RTympanogram?.update(data.tympanogram?.R)
151
+ data?.tympanogram?.L && this.LTympanogram?.update(data.tympanogram?.L)
152
+ data?.reflex?.R && this.RReflex?.update(data?.reflex?.R)
153
+ data?.reflex?.L && this.LReflex?.update(data?.reflex?.L)
154
+ /*
138
155
 
139
156
  const session = patientData.sessions[sessionIndex]
140
157
 
141
- let data = {
158
+ let objData = {
142
159
  header: {
143
160
  officeName: officeData.name,
144
161
  officeLogo: officeData.logos[officeData.selectedLogoIndex],
@@ -163,15 +180,15 @@ export default class Form {
163
180
 
164
181
  // let keys = Object.keys(data)
165
182
  // if (keys.includes("header")) {
166
- if (data.header) {
167
- this.header?.update(data.header)
168
- this.data.header = data.header
183
+ if (objData.header) {
184
+ this.header?.update(objData.header)
185
+ this.data.header = objData.header
169
186
  }
170
187
  // }
171
188
  // if (keys.includes("patient")) {
172
- if (data.patient) {
173
- this.patient?.update(data.patient)
174
- this.data.patient = data.patient
189
+ if (objData.patient) {
190
+ this.patient?.update(objData.patient)
191
+ this.data.patient = objData.patient
175
192
  }
176
193
  // }
177
194
  // if (keys.includes("history")) {
@@ -231,6 +248,8 @@ export default class Form {
231
248
  this.footer?.update(data?.footer)
232
249
  this.data.footer = data.footer
233
250
  }
251
+
252
+ */
234
253
  }
235
254
 
236
255
  // خطوط نقطه چین مارجین فرم
@@ -1,4 +1,4 @@
1
- // import '../styles.css' // برای تست منتقل شد به فایل ایندکس اصلی اچ‌تی‌ام‌ال و برای توسعه منتقل شده به ایندکس جی اس
1
+ // import '../../styles.css' // برای تست منتقل شد به فایل ایندکس اصلی اچ‌تی‌ام‌ال و برای توسعه منتقل شده به ایندکس جی اس
2
2
  import printForm from "./printForm.js"
3
3
  import Form from "../Form/Form.js"
4
4
  import putGrid from "../common/putGrid.js"
@@ -12,8 +12,9 @@ import templAudiometry from "../../assets/templates/templAudiometry.js"
12
12
  export default class Forms {
13
13
  constructor({ assets, container, templates, defaultTemplateIndex = 0, mode = 'production' } = {}) {
14
14
  // console.log('I`M FROM Forms.constructor METHOD !!!!!!!!!!!!!!');
15
-
15
+
16
16
  this.container = container
17
+ this.data = {}
17
18
  this.mode = mode;
18
19
  this.forms = [] // آرایه آبجکت های فرم های مختلف
19
20
  this.addForms({ templates, defaultTemplateIndex })
@@ -68,7 +69,7 @@ export default class Forms {
68
69
  // this.selectedForm = forms[index]
69
70
  selectedIndex = index
70
71
  this.selectedIndex = selectedIndex
71
- this.update(this.dataParams)
72
+ this.update({ data: this.data }) // با مقادیر قبلی آپدیت را انجام بده
72
73
  })
73
74
  }) // سمی‌کالن واجب
74
75
 
@@ -109,16 +110,35 @@ export default class Forms {
109
110
  }
110
111
 
111
112
  // این تابع یک بار از بیرون کلاس فراخوانی میشه و یک بار وقتی از داخل تمپلت فرم را عوض میکنیم
112
- update({ officeData, patientData, sessionIndex = 0 }) {
113
- // console.log('I`M FROM Forms.update METHOD !!!!!!!!!!!!!!');
113
+ update({ data, officeData, patientData, sessionIndex } = {}) {
114
+
115
+
116
+ // پارامتر اول برای آپدیت داخلی استفاده می‌شود
117
+ if (data) {
118
+
119
+ officeData = this.data.officeData
120
+ patientData = this.data.patientData
121
+ sessionIndex = this.data.sessionIndex
122
+ }
123
+ // console.log(patientData);
124
+
125
+
126
+ this.forms[this.selectedIndex].update({ officeData, patientData, sessionIndex })
127
+
128
+ this.data.officeData = officeData
129
+ this.data.patientData = patientData
130
+ this.data.sessionIndex = sessionIndex
114
131
 
132
+ // console.log('I`M FROM Forms.update METHOD !!!!!!!!!!!!!!');
133
+ //
115
134
  // اگر هر دو دیتا وجود داشت ادامه بده
116
- if (officeData && patientData) {
117
- // ذخیره کل دیتا برای استفاده داخلی آپدیت فرم انتخاب شده
118
- this.dataParams = { officeData, patientData, sessionIndex }
119
- // this.selectedForm.update({ officeData, patientData, sessionIndex })
120
- this.forms[this.selectedIndex].update(this.dataParams)
121
- }
135
+ // if (officeData && patientData) {
136
+ // // ذخیره کل دیتا برای استفاده داخلی آپدیت فرم انتخاب شده
137
+ // this.dataParams = { officeData, patientData, sessionIndex }
138
+ // // this.selectedForm.update({ officeData, patientData, sessionIndex })
139
+ // this.forms[this.selectedIndex].update(this.dataParams)
140
+ // }
141
+
122
142
  }
123
143
 
124
144
  // توابع داخلی ایجاد دکمه و لینک های بالای فرم
@@ -0,0 +1,34 @@
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
+ class formsUI {
7
+ constructor() {
8
+ this.data = {}
9
+
10
+ }
11
+
12
+ draw({ containerId = '#app' }) {
13
+ document.querySelector(containerId).insertAdjacentHTML('beforeend', `
14
+ <div id="forms"></div>
15
+ `);
16
+
17
+ const container = document.getElementById('forms')
18
+ this.forms = new Forms({ container, templates: [templCombo, templAudiometry], mode: 'develop' });
19
+ }
20
+
21
+ update({ officeData, patientData, sessionIndex }) {
22
+ officeData && (this.officeData = officeData);
23
+ patientData && (this.patientData = patientData);
24
+ this.currentSessionPatientData = patientData.sessions[sessionIndex]
25
+ this.forms.update({ officeData, patientData, sessionIndex })
26
+ }
27
+
28
+ }
29
+
30
+ export default new formsUI()
31
+
32
+
33
+
34
+
@@ -19,7 +19,7 @@ export default class Header {
19
19
  let x = dims.margin.left;
20
20
  let y = dims.margin.top;
21
21
 
22
- const svg = putSVG({ x, y, width, height, style: 'font-family: Vazir; direction: rtl !important; user-select: none;' })
22
+ const svg = putSVG({ x, y, width, height, style: 'font-family: Vazirmatn; direction: rtl !important; user-select: none;' })
23
23
 
24
24
  // Logo
25
25
  let image = document.createElementNS(svgNS, "image");
@@ -54,7 +54,7 @@ export default class Header {
54
54
  user-select: none;
55
55
  direction: rtl;
56
56
  /* text-align: center; */
57
- font-family: Vazir;
57
+ font-family: Vazirmatn;
58
58
  font-size: 0.8mm;
59
59
  font-weight: bolder;
60
60
  text-anchor: start; /*تراز افقی*/
@@ -22,7 +22,7 @@ export default class MultiText {
22
22
 
23
23
  let style, className;
24
24
  style = `
25
- font-family: Vazir;
25
+ font-family: Vazirmatn;
26
26
  font-size: 1mm;
27
27
  white-space: break-spaces;
28
28
  /* font-weight: bold; */