Activities of "sumeyye.kurtulus"

Thank you for giving mode details on that. However, I cannot produce the same problem on my end. Could you specify which package manager you use? You can also create a minimal reproducible example and send it to this address sumeyye.kurtulus@volosoft.com, so that I can assist you further.

Hello, it currently works as expected as you have mentioned. However, if encryption is required, you’ll need to apply a workaround until we release an official fix for that.

In the meantime, you can override the related service just to skip the error. Here’s a suggested approach:

// new-remember-me.service.ts
export class NewRememberMeService extends RememberMeService {
  readonly #rememberMe = 'remember_me';

  override getFromToken(accessToken: string): boolean {
    const tokenBody = accessToken.split('.')[1].replace(/-/g, '+').replace(/_/g, '/');
    try {
      const decoded = JSON.parse(atob(tokenBody));
      return Boolean(decoded[this.#rememberMe]);
    } catch {
      return false;
    }
  }
}

You need to add this provider to the app.module.ts :

{ provide: RememberMeService, useClass: NewRememberMeService },

We appreciate your patience and cooperation while we work on a permanent solution.

Thank you for the update. Since the issue persists, could you please share your package.json file so we can verify the package versions? Could you also try deleting temporary files such as node_modules,yarn-lock or package-lock.json and re-install dependencies depending on your package manager.

Thanks for the detailed feedback and for sharing the steps you followed—it is much appreciated.

To clarify: the React Native template is intended primarily for mobile platforms, and while Web support via Expo is possible, it is not officially supported or prioritized at the moment. We understand that Web can be useful for development workflows, especially in CRUD scenarios, but it falls outside the main scope of the template.

The points you raised around DBMigrator config, local IP usage, and HTTP access are all valid, and we’ll look at improving the docs accordingly.

If you encounter specific issues with the dev build or something clearly tied to the template, feel free to raise them in a separate thread so we can address them in a focused way.

Hello, the current setup, the user View Details modal isn't directly customizable. However, you can extend the functionality by using Entity Action Extensions to add a custom tab or action that opens a separate component with the additional details you want to display.

Here's how you can approach it:

  1. Create a new Angular component that will serve as your custom tab or detail view.
  2. Use the Entity Action Extension API to register a new action (e.g., “View More Details”) for the User entity.
  3. In the action handler, open your custom component either in a modal or a separate route, depending on your UI preference.

You can refer to the official documentation for step-by-step guidance:

👉 Entity Action Extensions – Angular UI | ABP Docs

Let me know if you need further assistance.

Hello, In the Angular frontend generated by ABP Studio for a microservice-based architecture, each subproject typically corresponds to an Angular library.

These frontend "subsystems" are not standalone Angular applications by default — they are structured as libraries, meaning they are meant to be consumed by a root Angular application (the host app). This structure promotes code sharing and encapsulation across microservices.

However, it is technically possible to host each subsystem as an independent Angular application, but this requires:

  1. Creating a new Angular application shell for each library.
  2. Wiring up routing, environment configs, and bootstrapping logic manually.
  3. Ensuring each new app has access to shared services (e.g., authentication, theming, localization) if needed — which might involve refactoring common modules into shared libraries.

So, while they're not tightly coupled to the main app and can be decoupled, they’re not standalone out-of-the-box. Making them standalone would involve restructuring and setting up new applications that consume these libraries independently.

Yes, there is a temporary workaround for that. I can suggest you to override the routes component as follows until we publish the fix:

//new-routes.component.ts
import { RoutesComponent } from '@volo/abp.ng.theme.lepton';
@Component({
  selector: 'app-new-routes',
  imports: [SharedModule],
  templateUrl: './new-routes.component.html',
})
export class NewRoutesComponent extends RoutesComponent implements OnInit {
  readonly environmentService = inject(EnvironmentService);
  readonly cdRef = inject(ChangeDetectorRef);
  public _router = inject(Router);

  override ngOnInit(): void {
    const { oAuthConfig } = this.environmentService.getEnvironment() || {};
    const waitForNavigation = oAuthConfig.responseType === 'code';

    const routerEvents$ = waitForNavigation
      ? this._router.events.pipe(
          filter(event => event instanceof NavigationEnd),
          take(1)
        )
      : of(null);

    routerEvents$.subscribe(() => {
      let node = {
        parent: findRoute(this.routes, getRoutePath(this._router)),
      } as TreeNode<ABP.Route>;

      const nodes: string[] = [];
      while (node.parent) {
        node = node.parent;
        nodes.push(node.name);
      }

      let max = nodes.length + this.initialLevel;

      nodes.forEach(name => {
        this.expandedRoutes.add(name + --max);
      });

      this.cdRef.detectChanges();
    });
  }
}
//new-routes.component.html
<div class="lp-sidebar-wrapper mx-2">
  <nav role="navigation" class="lp-sidebar-navi">
    <ul>
      @for (component of contentBefore; track $index) {
      <li class="position-relative">
        <ng-container *ngComponentOutlet="component; injector: injector" />
      </li>
      } @for (route of routes$ | async; track $index) {
      <ng-container
        [ngTemplateOutlet]="isDropdown(route) ? dropdownLink : defaultLink"
        [ngTemplateOutletContext]="{ $implicit: route, level: initialLevel }"
      />
      } @for (component of contentAfter; track $index) {
      <li class="position-relative">
        <ng-container *ngComponentOutlet="component; injector: injector" />
      </li>
      }

      <ng-template #defaultLink let-route let-level="level">
        <li
          routerLinkActive="active-page current"
          [routerLinkActiveOptions]="{ exact: route.path === '/' }"
          *abpPermission="route.requiredPolicy"
          (click)="$event.stopPropagation(); onNavigate(route, level)"
        >
          <a [routerLink]="[route.path]" (click)="clickedToLink.emit()">
            <ng-container *ngTemplateOutlet="linkContent; context: { $implicit: route }" />
          </a>
        </li>
      </ng-template>

      <ng-template #linkContent let-route>
        @if (route.iconClass) {
        <span class="lp-icon">
          <i [ngClass]="route.iconClass"></i>
        </span>
        }
        <span class="lp-text">
          {{ route.name | abpLocalization }}
        </span>
      </ng-template>

      <ng-template #dropdownLink let-route let-level="level">
        @if (route.children?.length) {
        <li
          *abpPermission="route.requiredPolicy"
          class="has-drop"
          [class.current]="expandedRoutes.has(route.name + level)"
        >
          <a
            attr.data-level="{{ level }}"
            href="javascript:void(0)"
            (click)="
              $event.stopPropagation();
              isMenuPlacementTop && !smallScreen ? null : toggleExpand(route, level)
            "
          >
            <ng-container *ngTemplateOutlet="linkContent; context: { $implicit: route }" />

            <span class="lp-arrow-icon" [attr.for]="route.name">
              <i class="fa fa-chevron-down" aria-hidden="true"></i>
            </span>
          </a>
          <ul
            class="dropdown-ul"
            [ngClass]="{
                'd-block overflow-hidden': isMenuPlacementTop && !smallScreen ? false : true,
              }"
            [id]="route.name"
          >
            <div
              #routeContainer
              [@collapse]="
                !isMenuPlacementTop
                  ? expandedRoutes.has(route.name + level)
                    ? 'expanded'
                    : 'collapsed'
                  : ''
              "
            >
              @for (child of route.children; track $index) {
              <ng-container
                [ngTemplateOutlet]="dropdownMenu"
                [ngTemplateOutletContext]="{ $implicit: child, level: level + 1 }"
              />
              }
            </div>
          </ul>
        </li>
        }
      </ng-template>

      <ng-template #dropdownMenu let-route let-level="level">
        <ng-container
          *ngTemplateOutlet="
            isDropdown(route) ? dropdownLink : defaultLink;
            context: { $implicit: route, level: level }
          "
        />
      </ng-template>
    </ul>
  </nav>
</div>
//app.component.ts
import { ReplaceableComponentsService } from '@abp/ng.core';
import { eThemeLeptonComponents } from '@volo/abp.ng.theme.lepton';
@Component({
  standalone: false,
  selector: 'app-root',
  template: `
    ...
  `,
})
export class AppComponent {
  protected replaceComponent = inject(ReplaceableComponentsService);
  constructor() {
    this.replaceComponent.add({
      component: NewRoutesComponent,
      key: eThemeLeptonComponents.Routes,
    });
  }
}

Yes, you can update the frontend version to 9.1.

Please also make sure to update your Angular version to 19 by following the migration guide: https://abp.io/docs/latest/release-info/migration-guides/abp-9-1

Note that Angular now uses standalone: true by default, so you may need to explicitly set standalone: false for any components, directives, or pipes that are not standalone.

Let us know if you need any further assistance.

Hello, thank you for sharing the version details, and apologies for the delayed response.

After reviewing your setup, it looks like the issue is caused by an incorrect version of the @volosoft/abp.ng.theme.lepton-x package. Updating it to ~4.0.0 should resolve the problem.

Please give that a try and let us know if it works for you. We really appreciate your patience and cooperation—thanks again!

Thanks for providing the details. This will also be investigated and fixed in the next release.

Showing 171 to 180 of 429 entries
Learn More, Pay Less
33% OFF
All Trainings!
Get Your Deal
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
Made with ❤️ on ABP v10.0.0-preview. Updated on September 16, 2025, 10:35