Our pure JavaScript Scheduler component


Post by Globox21126 »

Hey,

I have debugged yours demo.

Seems like I'm missing something in the configuration.

When I comment out all fields from ProjectManager:

 	          // resourceStore: {
          //   fields: [
          //     { name: 'id', dataSource: 'Id' },
          //     { name: 'name', dataSource: 'name' }
          //   ]
          // },
          // eventStore: {
          //   fields: [
          //     { name: 'id', dataSource: 'Id' },
          //     { name: 'name', dataSource: 'name' },
          //     { name: 'startDate', dataSource: 'startDate', type: 'date' },
          //     { name: 'endDate', dataSource: 'endDate', type: 'date' },
          //     { name: 'cls', dataSource: 'cls' },
          //     { name: 'draggable', dataSource: 'draggable' },
          //     { name: 'resizable', dataSource: 'resizable' },
          //     { name: 'planed', dataSource: 'planed' },
          //     { name: 'resource', dataSource: 'resource' },
          //     { name: 'assignments', dataSource: 'assignments' }
          //   ]
          // },
          // assignmentStore: {
          //   fields: [
          //     { name: 'resourceId', dataSource: 'resourceId' },
          //     { name: 'event', dataSource: 'event' },
          //     { name: 'eventId', dataSource: 'eventId' },
          //     { name: 'id', dataSource: 'Id' },
          //     { name: 'units', dataSource: 'units' }
          //   ]
          // }

If commented out, split looks like that:

me.id and copy.id are different, thats why I'm able to split event.

	  split(splitPoint = 0.5) {
    const me = this, //here me.id === "_generatedClassDefEx24"
          clone = me.copy(), // and clone.id === "_generatedClassDefEx25"
          {
      eventStore,
      assignmentStore
    } = me,
          ownNewDuration = me.duration * splitPoint,
          cloneDuration = me.duration - ownNewDuration;

if (splitPoint <= 0 || splitPoint >= 1) {
  throw new Error('Split point must be > 0 and < 1');
}
// clone.id = 0; //--
clone.startDate = _Core_helper_DateHelper_js__WEBPACK_IMPORTED_MODULE_2__["default"].add(me.startDate, ownNewDuration, me.durationUnit);
clone.duration = cloneDuration;
me.duration = ownNewDuration;

if (eventStore) {
  debugger; 

  eventStore.add(clone);
  if (assignmentStore && !eventStore.usesSingleAssignment) {
    assignmentStore.add(me.assignments.map(assignment => {
    debugger; // dodano
      const clonedData = Object.assign({}, assignment.data, {
        eventId: clone.id,
        // From engine
        event: null,
        resource: null
      });
      delete clonedData.id;
      return clonedData;
    }));
  }
}

return clone;
  }

On the other hand, when stores are uncommeted:

	resourceStore: {
            fields: [
              { name: 'id', dataSource: 'Id' },
              { name: 'name', dataSource: 'name' }
            ]
          },
          eventStore: {
            fields: [
              { name: 'id', dataSource: 'Id' },
              { name: 'name', dataSource: 'name' },
              { name: 'startDate', dataSource: 'startDate', type: 'date' },
              { name: 'endDate', dataSource: 'endDate', type: 'date' },
              { name: 'cls', dataSource: 'cls' },
              { name: 'draggable', dataSource: 'draggable' },
              { name: 'resizable', dataSource: 'resizable' },
              { name: 'planed', dataSource: 'planed' },
              { name: 'resource', dataSource: 'resource' },
              { name: 'assignments', dataSource: 'assignments' }
            ]
          },
          assignmentStore: {
            fields: [
              { name: 'resourceId', dataSource: 'resourceId' },
              { name: 'event', dataSource: 'event' },
              { name: 'eventId', dataSource: 'eventId' },
              { name: 'id', dataSource: 'Id' },
              { name: 'units', dataSource: 'units' }
            ]
          }

Debugged split code when uncommented:

In my case:
me.id === 177
copy.id === 177

I bet, thats why my split doesnt work, because in the result I'm getting two events with identical ID.

I wonder, why in Your demo the id is generated, and in my case it isn't?

	  split(splitPoint = 0.5) {
    const me = this,
          clone = me.copy(),
          {
      eventStore,
      assignmentStore
    } = me,
          ownNewDuration = me.duration * splitPoint,
          cloneDuration = me.duration - ownNewDuration;

if (splitPoint <= 0 || splitPoint >= 1) {
  throw new Error('Split point must be > 0 and < 1');
}
// clone.id = 0; //--
clone.startDate = _Core_helper_DateHelper_js__WEBPACK_IMPORTED_MODULE_2__["default"].add(me.startDate, ownNewDuration, me.durationUnit);
clone.duration = cloneDuration;
me.duration = ownNewDuration;

if (eventStore) {
  debugger; 
  eventStore.add(clone);
  if (assignmentStore && !eventStore.usesSingleAssignment) {
    assignmentStore.add(me.assignments.map(assignment => {
    debugger; // dodano
      const clonedData = Object.assign({}, assignment.data, {
        eventId: clone.id,
        // From engine
        event: null,
        resource: null
      });
      delete clonedData.id;
      return clonedData;
    }));
  }
}

return clone;
  }

Post by saki »

Would you please post the modified version of my sample code that would demonstrate the problem?


Post by Globox21126 »

We have changed

{ name: 'id', dataSource: 'Id' }

, to

{ name: 'id', dataSource: 'id' }

. Seems that uppercase "Id" was the problem...

Now it works like a charm.
Anyway, thank You for the support!


Post Reply