دع الزوار يديرون شركتهم
الهدف
دع من يسجّلون الدخول إلى بوابتك ينتمون إلى شركة: ينشئونها، ويدعون زملاءهم إليها، ويرون من فيها، ويغيّرون الأدوار، ويغادرون — كل ذلك من شاشة ترسمها أنت.
قبل أن تبدأ
- بوابة تطلب من الزائر تسجيل الدخول. انظر اطلب من الزوار تسجيل الدخول.
- إرسال البريد، يهيّئه من يدير تثبيت بارسوير لديك. الدعوة رسالة فيها رابط؛ وبلا بريد لا يمكن دعو ة أحد.
لماذا هذه من عمل المنصة لا من واجهتك المخصّصة
كل ما تقرأه بوابتك وتكتبه يمرّ عبر واجهة مخصّصة كتبتها أنت. أما الشركة فلا، ويستحق أن تعرف السبب: من ينتمي إلى أي شركة تحفظه خدمة الهوية في المنصة، وهي لا تقبل جلسة الزائر إلا من خادم البوابة نفسه. وواجهتك المخصّصة لا تعمل هناك — بل حيث جداولك — فلن يُسمح لأي نصّ برمجي تكتبه بدعوة أحد.
لذلك تمنحك المنصة النداءات الستة، وترسم أنت الشاشة. لا توجد صفحة «أشخاص» جاهزة داخل المنصة: قائمة الأعضاء وصندوق الدعوة ومنتقي الدور كلها من ترتيبك، مثل بقية بوابتك.
النداءات الستة
| النداء | ماذا يفعل |
|---|---|
startCompany(name) | ينشئ شركة ويجعل هذا الزائر أول مالك لها |
invitePerson(email) / invitePerson(email, role) | يرسل دعوة بالبريد. للمالكين فقط. بلا دور تعني Member |
loadCompanyPeople(into) / loadCompanyPeople(into, companyInto) | يضع الأشخاص في حقل حالة، والشركة نفسها في حقل ثانٍ |
changePersonRole(person, role) | يغيّر ما يستطيعه زميل |
removePerson(person) | يزيل زميلًا، أو يسحب دعوة لم تُقبل بعد |
leaveCompany() | يغادر هذا الزائر الشركة |
الأدوار هي Member وBilling وOwner، ويستطيع كلٌّ ما يستطيعه ما قبله. المالكون وحدهم يدعون ويغيّرون الأدوار ويزيلون؛ المنصة هي التي تقرّر ذلك، لا شاشتك.
الخطوات
-
ارسم صندوق نص واربط قيمته بحقل حالة، مثل
state.text. -
ارسم زرًّا واكتب في معالج click:
startCompany(getState("text"));createRecord("par_client", { par_name: getState("text") });loadCompanyPeople("people", "company"); -
ارسم زرًّا ثانيًا للدعوة:
invitePerson(getState("text"));loadCompanyPeople("people", "company");notify("أُرسلت الدعوة."); -
وفي screenLoad للشاشة ضع
loadCompanyPeople("people", "company");لتُفتح الصفحة والقائمة ممتلئة.
يفعل startCompany أمرين: ينشئ الشركة ويوجّه جلسة هذا الزائر إليها. وبعد ذلك فقط يجيب
portalCustomerId() بشيء — وهو ما تقرأه الواجهة خلف createRecord لتمنح سجلّك معرّف الشركة.
وإن عكست الترتيب فلا معرّف تمنحه للسجل. واجهتك لا تتلقى معرّفًا من الصفحة، ولا ينبغي أن تفعل: المنصة هي التي تقرّره، وهذا ما يمنع أحدًا من ادّعاء شركة غيره.
ماذا يحلّ في حقول الحالة
يملأ loadCompanyPeople("people", "company") حقلين:
-
state.people— صفّ لكل زميل ولكل دعوة لم تُقبل بعد:الحقل ما هو idmember:…أوinvitation:…— مرّره كما هو إلىremovePersonnameاسمه، أو العنوان الذي ذهبت إليه الدعوة emailالعنوان الذي يسجّل به الدخول roleMemberأوBillingأوOwnerstatusMemberأوInvitedisYouهل هذا الصف هو قارئ الصفحة نفسه -
state.company—{ name, role, canManage }. اربط عنوانًا بـstate.company.name، واربط ظهور صندوق الدعوة بـstate.company.canManageحتى لا يُعرض على عضو عادي زرٌّ سيُرفض.
ومن ليس في أي شركة يحصل على قائمة فارغة وشركة فارغة، وليس هذا خطأً — بل هو ما وُجد له نموذج «أنشئ شركة».
زر إزالة يعمل على نوعَي الصفوف
كرّر جدولًا على state.people وضع في الصف زرًّا:
removePerson(row.id);
loadCompanyPeople("people", "company");
يزيل ذلك زميلًا أو يسحب دعوة، لأن معرّف الصف يقول أيّهما. أنت لا تكتب هذا الشرط — ولا ينبغي، لأن الأمرين مختلفان لدى المنصة وهي وحدها تعرف قواعد كلٍّ منهما.
ولا يمكن تغيير دور دعوة. changePersonRole على صف invitation: يُرفض بجملة: اسحب الدعوة وادعُه من
جديد.
كيف يبدو الرفض
تظهر جملة المنصة نفسها بجانب الزر الذي ضُغط — «المالك وحده يستطيع دعوة الأشخاص»، «لا يستطيع آخر مالك مغادرة الشركة»، «هذا العنوان موجود في الشركة بالفعل».
لا حاجة لأن تكتب هذه الرسائل، ولا أن تستبقها: القواعد للمنصة، والشاشة التي تخمّن ستخطئ التخمين يومًا ما.
من كان المالك الوحي د لشركة عليه أن يجعل زميلًا مالكًا أولًا. وهذا مقصود: شركة خلفها سجلّات لا تُترك بلا من يديرها بضغطة زر واحدة.
أين تصل الدعوة
إلى باب بوابتك الأمامي، مثل رابط تأكيد العنوان ورابط إعادة تعيين كلمة المرور. من كان مسجّل الدخول ينضم فورًا؛ ومن لم يكن يرى نموذج الدخول وفوقه لقد تمت دعوتك، والدعوة لا تزال بانتظاره بعد إنشاء الحساب وتأكيد العنوان. انظر اطلب من الزوار تسجيل الدخول.
ما فائدة هذا
الشركة هي ما تضيّق به سياسة البيانات السجلّات. فالصفحتان تكملان بعضهما: هذه تقول كيف يصير للمرء شركة، وتلك تقول كيف تصير صفوف جدول تابعة لها.