FullCalendar-এর রিসোর্স টাইমলাইন ও রিসোর্স কলাম Premium-এর অংশ: বাণিজ্যিক অ্যাপের জন্য একটি পেইড লাইসেন্স কী লাগে। এর লাইসেন্স পেজে বিনামূল্যের বিকল্পগুলো দেওয়া আছে: পুরোপুরি AGPL অ্যাপের জন্য, আর নিবন্ধিত অলাভজনক প্রতিষ্ঠানের জন্য। Needless UI শিডিউলারে দুটোই আছে MIT লাইসেন্সে, সঙ্গে পুনরাবৃত্ত ইভেন্ট আর iCalendar ফাইল। এই গাইড একটি Angular অ্যাপকে একটি থেকে অন্যটিতে নিয়ে যায়: কী একইভাবে চলে আসে, কী আসে না, আর কোন ডেটা রূপান্তর করতে হয়।
এখানে FullCalendar 7-এর নাম ব্যবহার করা হয়েছে, আর যেখানে ভার্সন 6-এর নাম আলাদা, সেগুলো তৃতীয় বন্ধনীতে দেওয়া আছে। FullCalendar-এর Angular কানেক্টর Angular 16 থেকে 22 সাপোর্ট করে; Needless UI-এর দরকার Angular 22।
আপনি কী পাবেন
| ফিচার | FullCalendar | Needless UI |
|---|---|---|
| রিসোর্স টাইমলাইন: প্রতিটি রুম বা ব্যক্তির জন্য একটি সারি | Premium | হ্যাঁ: একটি দিন, সপ্তাহ বা মাস |
| দিন ও সপ্তাহের ভিউতে কলাম হিসেবে রিসোর্স | Premium | হ্যাঁ |
| মাস, সপ্তাহ ও দিনের ভিউ | বিনামূল্যে | হ্যাঁ |
| ড্র্যাগ করে সরানো ও রিসাইজ করা | বিনামূল্যে; অন্য রিসোর্সে সরাতে Premium লাগে | হ্যাঁ, অন্য রিসোর্সেও। শেষ প্রান্ত টেনে রিসাইজ করা যায়, শুরুরটা নয়। |
| ইভেন্ট তৈরির জন্য সময় বেছে নেওয়া | বিনামূল্যে | হ্যাঁ, পয়েন্টার, লং প্রেস বা কীবোর্ড দিয়ে |
| ওভারল্যাপ না হওয়ার মতো নিয়ম | বিনামূল্যে: ওভারল্যাপ ও কনস্ট্রেইন্টের অপশন | হ্যাঁ: একটিই allow ফাংশন, প্রতিটি পরিবর্তনের আগে যাকে জিজ্ঞেস করা হয় |
| কীবোর্ড দিয়ে ইভেন্ট সরানো ও রিসাইজ করা | এর অ্যাক্সেসিবিলিটি ডকুমেন্টেশনে নেই, যেখানে ARIA লেবেল আর Tab ফোকাসের কথা আছে | হ্যাঁ, স্ক্রিন রিডারে ঘোষণাসহ |
| পুনরাবৃত্ত ইভেন্ট | বিনামূল্যে, rrule প্লাগইন ও লাইব্রেরি দিয়ে | বিল্ট-ইন: RFC 5545 নিয়ম, তবে EXRULE, RDATE বা ঘণ্টাভিত্তিক নিয়ম ছাড়া |
| iCalendar (.ics) | বিনামূল্যে: একটি ফিড পড়ে | .ics ফাইল পড়ে ও লেখে |
| লিস্ট ও বছরের ভিউ | বিনামূল্যে | সামনের দিনগুলোর একটি এজেন্ডা; বছরের ভিউ নেই |
| টাইম জোন | বিনামূল্যে: লোকাল, UTC বা নামসহ জোন | না: যে সময় পায়, ঘড়ির সেই সময়ই দেখায় |
| গ্রুপ করা, নেস্টেড বা একাধিক কলামের রিসোর্স | Premium | না: একটি কলাম, যা আপনার টেমপ্লেট আঁকে |
| বাইরে থেকে ড্র্যাগ অ্যান্ড ড্রপ, ব্যাকগ্রাউন্ড ইভেন্ট | বিনামূল্যে | না |
| প্রিন্টিং, ভার্চুয়াল রেন্ডারিং | Premium | না |
| ফ্রেমওয়ার্ক | Angular 16 থেকে 22, React, Vue, সাধারণ JavaScript ও আরও | Angular 22 ও React 19 |
কোনটির বদলে কোনটি
| FullCalendar | Needless UI শিডিউলার |
|---|---|
<full-calendar [options]>, plugins, schedulerLicenseKey | <nui-scheduler>, প্রতিটি অপশনের জন্য একটি ইনপুটসহ; কোনো প্লাগইন বা কী নেই |
initialView: 'resourceTimelineDay' | view="timeline", আর সপ্তাহ বা মাসের জন্য timelineSpan |
initialView: 'timeGridWeek' | view="week"; [(view)] দুই দিকেই বাইন্ড হয় |
resources, events | [resources], [events] |
resourceId, extendedProps | resource, data |
editable, selectable | editable, selectable |
select | (slotSelect): { start, end, allDay, resource } |
eventDrop, eventResize | (eventChange): আপনি events আপডেট না করা পর্যন্ত কিছুই সরে না |
eventClick | (eventClick) |
eventOverlap, selectOverlap, eventAllow | [allow]: সরানো, রিসাইজ ও বাছাইয়ের জন্য একটিই ফাংশন |
slotDuration, snapDuration | slotMinutes, snapMinutes, মিনিটে |
slotMinTime, slotMaxTime, scrollTime | dayStart, dayEnd, scrollHour, ঘণ্টায় |
businessHours | [businessHours], সপ্তাহের দিন 1 (সোমবার) থেকে 7 |
datesSet | (rangeChange) |
eventContent, resourceCellContent [resourceLabelContent] | nuiSchedulerEvent ও nuiSchedulerResource টেমপ্লেট |
locale, firstDay | locale (যেকোনো BCP 47 ট্যাগ), 1 থেকে 7 পর্যন্ত firstDay, আর এর লেখাগুলোর জন্য labels |
রুম বুকিংয়ের টাইমলাইন, দুইভাবেই
রুম হলো রিসোর্স, আর বুকিং হলো ইভেন্ট। কোনো রুমের সারি জুড়ে ড্র্যাগ করলে রুমটি বুক হয়, কোনো বুকিং ড্র্যাগ করলে সেটি সরে যায়, আর একটি রুমে একসময়ে একটিই বুকিং থাকতে পারে। FullCalendar 7 ও তার Premium রিসোর্স টাইমলাইন দিয়ে:
Needless UI শিডিউলার দিয়ে:
দুটি জিনিস আলাদাভাবে কাজ করে। FullCalendar নিজেই বুকিং সরিয়ে দেয়, আর অ্যাপ সেই পরিবর্তন নিজের ডেটায় কপি করে নেয়; Needless UI শিডিউলার শুধু সেটি জানায়, আর আপনি events আপডেট করলে তবেই পরিবর্তনটি থাকে, তাই আপনার ডেটাই থাকে একমাত্র উৎস। আর allow সাধারণ কোড, পয়েন্টার বা কীবোর্ড থেকে আসা প্রতিটি পরিবর্তনের আগে যাকে জিজ্ঞেস করা হয়, তাই নিয়মটি আপনি নিজেই টেস্ট করতে পারেন। রুম বুকিংয়ের গাইড ধাপে ধাপে এই অ্যাপটি তৈরি করে দেখায়।
ডেটা রূপান্তর
| FullCalendar | Needless UI |
|---|---|
সারাদিনের ইভেন্টের end হলো ইভেন্টের পরের দিন | সারাদিনের ইভেন্টের end হলো তার শেষ দিন: এক দিন বাদ দিন |
সময়ের শেষে Z বা +02:00-এর মতো অফসেট থাকতে পারে | অফসেট ছাড়া ঘড়ির সময়, যেমন 2026-11-02T09:30 |
সপ্তাহের দিন 0 (রবিবার) থেকে 6, businessHours ও firstDay-তে | সপ্তাহের দিন 1 (সোমবার) থেকে 7 (রবিবার) |
স্ট্রিং হিসেবে সময়কাল, যেমন '00:30' | সংখ্যা: মিনিট বা ঘণ্টা |
| রিসোর্স সাজানো হয় id, তারপর শিরোনাম অনুযায়ী | রিসোর্স থাকে অ্যারের ক্রমে |
অবজেক্ট হিসেবে rrule, আর exrule | RFC 5545 স্ট্রিং, যেমন FREQ=WEEKLY;BYDAY=MO,FR, আর exdate |
America/New_York-এর মতো টাইম জোন | আগে সময়গুলো রূপান্তর করুন। nuiSchedulerFromIcs(text, { timeZone }) .ics ফাইল পড়ার সময়ই রূপান্তর করে। |
যা নেই, তা দরকার হলে
আপনার অ্যাপ যদি টাইম জোন, গ্রুপ করা রিসোর্স, বাইরে থেকে ড্র্যাগ অ্যান্ড ড্রপ বা প্রিন্টিংয়ের ওপর নির্ভর করে, তাহলে শিডিউলার এখনো FullCalendar-এর জায়গা নিতে পারবে না। আপনার যা দরকার, তার জন্য একটি issue খুলুন। বাকি সবকিছুর জন্য শিডিউলারের পেজে প্রতিটি ইনপুট, আউটপুট ও উদাহরণ আছে।